web-dev-qa-db-fra.com

Comment insérer des valeurs 'NULL' dans la base de données PostgreSQL en utilisant Python?

Existe-t-il une bonne pratique pour saisir des valeurs de clé NULL dans une base de données PostgreSQL lorsqu'une variable est None en Python?

Exécution de cette requête:

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))

entraîne une exception TypeError lorsque user_id est None.

Comment insérer un NULL dans la base de données lorsqu'une valeur est None, en utilisant le psycopg2 chauffeur?

27
xpanta

Pour insérer des valeurs nulles dans la base de données, vous avez deux options:

  1. omettez ce champ de votre instruction INSERT, ou
  2. utilisez None

Aussi: Pour vous prémunir contre l'injection SQL, vous ne devez pas utiliser d'interpolation de chaîne normale pour vos requêtes.

Vous devez passer deux (2) arguments à execute(), par exemple:

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

Alternative n ° 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))
44
bernie

Avec le psycopg actuel, au lieu de None, utilisez une variable définie sur '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)
3
wolf2600