Wie ‚NULL‘ Werte in PostgreSQL-Datenbank mit Python einfügen?
-
26-09-2019 - |
Frage
Gibt es eine gute Praxis NULL
Schlüsselwerte zu einer PostgreSQL-Datenbank für die Eingabe, wenn eine Variable ist None
in Python?
Ausführen dieser Abfrage:
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))
Ergebnisse in einer TypeError
Ausnahme, wenn user_id
ist None
.
Wie kann ein NULL
in die Datenbank eingefügt werden, wenn ein Wert None
, mit dem psycopg2
Treiber?
Lösung
Um Nullwerte in die Datenbank einfügen haben Sie zwei Möglichkeiten:
- weglassen das Feld aus Ihrer Anweisung INSERT oder
- Verwendung
None
Auch:. Zum Schutz vor SQL-Injektion nicht normale String-Interpolation für Ihre Abfragen verwenden sollte
Sie sollten zwei übergeben (2) Argumente zu execute()
, z.
mycursor.execute("""INSERT INTO products
(city_id, product_id, quantity, price)
VALUES (%s, %s, %s, %s)""",
(city_id, product_id, quantity, price))
Alternative # 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))
Andere Tipps
Mit dem aktuellen psycopg statt Keine, verwenden Sie eine Variable auf '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)
Ein einfacher Ansatz, der auch mit einer hohen Anzahl von Spalten praktisch ist:
Let row
eine Liste von Werten sein, dass eingefügt werden None
enthalten. So fügen Sie es in PostgreSQL Sie folgt wir als
values = ','.join(["'" + str(i) + "'" if i else 'NULL' for i in row])
cursor.execute('insert into myTable VALUES ({});'.format(values))
conn.commit()