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?

War es hilfreich?

Lösung

Um Nullwerte in die Datenbank einfügen haben Sie zwei Möglichkeiten:

  1. weglassen das Feld aus Ihrer Anweisung INSERT oder
  2. 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()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top