كيفية إدراج قيم "NULL" في قاعدة بيانات postgreSQL باستخدام Python؟
-
26-09-2019 - |
سؤال
هل هناك ممارسة جيدة للدخول 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
سائق؟
المحلول
لإدراج القيم الفارغة إلى قاعدة البيانات ، لديك خياران:
- حذف هذا الحقل من بيان الإدراج الخاص بك ، أو
- استعمال
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()
لا تنتمي إلى StackOverflow