sqlite3.ProgrammingError: বাইন্ডিং সরবরাহের ভুল সংখ্যা। বর্তমান বিবৃতিটি 1 ব্যবহার করে এবং 74 টি সরবরাহ করা হয়


185
def insert(array):
    connection=sqlite3.connect('images.db')
    cursor=connection.cursor()
    cnt=0
    while cnt != len(array):
            img = array[cnt]
            print(array[cnt])
            cursor.execute('INSERT INTO images VALUES(?)', (img))
            cnt+= 1
    connection.commit()
    connection.close()

এটি আমাকে কেন ত্রুটি দিচ্ছে তা আমি বুঝতে পারি না, আমি যে প্রকৃত স্ট্রিংটি 74োকানোর চেষ্টা করছি তা 74৪ টি চর দীর্ঘ, এটি হ'ল: "/ জিআইএফএস / মহাকাব্যিক-ব্যর্থ-ফটো-সেখানে-আই-ফিক্সড-ইট-আও-ম্যান-দ্য -tire-চাপ-low.gif "

এটি সন্নিবেশ করার আগে আমি str (অ্যারে [সিএনটি]) চেষ্টা করার চেষ্টা করেছি, তবে একই সমস্যাটি ঘটছে, ডাটাবেসটিতে কেবল একটি কলাম রয়েছে, এটি একটি পাঠ্য মান।

আমি এটি কয়েক ঘন্টা ছিল এবং আমি কি ঘটছে তা বুঝতে পারি না।

উত্তর:


378

আপনাকে একটি সিকোয়েন্সে যেতে হবে তবে আপনি নিজের পরামিতিগুলিকে একটি টিপল করতে কমাটি ভুলে গেছেন:

cursor.execute('INSERT INTO images VALUES(?)', (img,))

কমা ব্যতিরেকে (img)কেবল একটি গোষ্ঠীভুক্ত ভাব, একটি টিউপল নয় এবং এভাবে imgস্ট্রিংটিকে ইনপুট ক্রম হিসাবে বিবেচনা করা হয়। যদি সেই স্ট্রিংটি 74 টি অক্ষর দীর্ঘ হয়, তবে পাইথন দেখতে পাবে যে 74 টি পৃথক দন্ড মান হিসাবে প্রতিটি অক্ষর দীর্ঘ।

>>> len(img)
74
>>> len((img,))
1

আপনি যদি পড়তে সহজ মনে করেন তবে আপনি আক্ষরিক একটি তালিকাও ব্যবহার করতে পারেন:

cursor.execute('INSERT INTO images VALUES(?)', [img])

37
আমরা প্রচুর অ্যাডভান্সড কোডার যা ভুল করে ফেলেছি, তাই বোকা বোধ করার দরকার নেই। :)
মিঃ গম্বলে

6
এই আমাকেও। যদি "অ্যাডভান্সড কোডার" এটিকে বোকা বানায় তবে এর অর্থ এটি অনর্থক। আইএমএইচও, যদি এক্সিকিউটিভ () একমাত্র মূল্যবান টুপলের পরিবর্তে একটি একক মান গ্রহণ করে তবে এটি আরও স্বাভাবিক হবে? প্রশ্নে যাইহোক, ইঙ্গিত জন্য ধন্যবাদ!
ল্যারিক্স ডিডিডুয়া

5
@ user465139: %অপারেটর এই strজাতীয় যাদু করে — এটি একটি টিপলকে একাধিক মান হিসাবে বিবেচনা করে তবে একটি str(বা অন্য কোনও ধরণের পুনরাবৃত্ত) একক মান হিসাবে বিবেচনা করে। তবে এটি সমাধানের চেয়ে অনেকসময় বিভ্রান্তির কারণ হয়ে দাঁড়ায়, এ কারণেই স্টাডলিবের অন্য কোনও কিছুই এই ধরণের যাদু চেষ্টা করে না।

%sসুরক্ষা সংক্রান্ত উদ্বেগগুলির জন্যও ব্যবহারের পরামর্শ দেওয়া হয় না
ডকস.পিথন.আর /

2
cursor.execute(sql,array)

কেবল দুটি যুক্তি লাগে।
এটি "অ্যারে" পুনরুক্তি করা হবে - উদ্দেশ্য এবং ম্যাচ? স্কয়ার স্ট্রিং মধ্যে।
(এসকিউএল-ইনজেকশন এড়াতে স্যানিটি চেক সহ)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.