كيفية إدراج قيم "NULL" في قاعدة بيانات postgreSQL باستخدام Python؟

StackOverflow https://stackoverflow.com/questions/4231491

سؤال

هل هناك ممارسة جيدة للدخول NULL قيم المفاتيح لقاعدة بيانات postgresql عندما يكون المتغير None في بيثون؟

تشغيل هذا الاستعلام:

mycursor.execute('INSERT INTO products (user_id, city_id, product_id, quantity, price) VALUES (%i, %i, %i, %i, %f)' %(user_id, city_id, product_id, quantity, price))

يؤدي إلى AA TypeError استثناء متى user_id هو None.

كيف يمكن NULL يتم إدراجها في قاعدة البيانات عندما تكون القيمة None, ، باستخدام psycopg2 سائق؟

هل كانت مفيدة؟

المحلول

لإدراج القيم الفارغة إلى قاعدة البيانات ، لديك خياران:

  1. حذف هذا الحقل من بيان الإدراج الخاص بك ، أو
  2. استعمال None

أيضًا: للحماية من حقن SQL ، يجب ألا تستخدم الاستيفاء العادي للسلسلة لاستفساراتك.

يجب أن تمرر اثنين (2) حجج إلى execute(), ، على سبيل المثال:

mycursor.execute("""INSERT INTO products 
                    (city_id, product_id, quantity, price) 
                    VALUES (%s, %s, %s, %s)""", 
                 (city_id, product_id, quantity, price))

البديل رقم 2:

user_id = None
mycursor.execute("""INSERT INTO products 
                    (user_id, city_id, product_id, quantity, price) 
                    VALUES (%s, %s, %s, %s, %s)""", 
                 (user_id, city_id, product_id, quantity, price))

نصائح أخرى

باستخدام PSYCOPG الحالي ، بدلاً من لا شيء ، استخدم مجموعة متغيرة إلى "NULL".

variable = 'NULL'
insert_query = """insert into my_table values(date'{}',{},{})"""
format_query = insert_query.format('9999-12-31', variable, variable)
curr.execute(format_query)
conn.commit()

>> insert into my_table values(date'9999-12-31',NULL,NULL)

نهج أبسط هو أيضًا عملي مع عدد كبير من الأعمدة:

يترك row تكون قائمة بالقيم التي يجب إدراجها والتي قد تحتوي على None. لإدراجها في postgresql نفعلها على النحو التالي

values = ','.join(["'" + str(i) + "'" if i else 'NULL' for i in row])
cursor.execute('insert into myTable VALUES ({});'.format(values))
conn.commit()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top