Question

Y at-il une bonne pratique pour la saisie des valeurs clés de NULL à une base de données PostgreSQL lorsqu'une variable est None en Python?

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

aboutit à une une exception TypeError lorsque user_id est None.

Comment un NULL être inséré dans la base de données lorsqu'une valeur est None, en utilisant le pilote psycopg2?

Était-ce utile?

La solution

Pour insérer des valeurs NULL à la base de données que vous avez deux options:

  1. omettent ce champ de votre instruction INSERT ou
  2. utilisation None

De plus. Pour se prémunir contre l'injection SQL, vous ne devriez pas utiliser l'interpolation de chaîne normale pour vos requêtes

arguments

Vous devez passer deux (2) à 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))

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

Autres conseils

Avec la psycopg actuelle, au lieu de None, utilisez un ensemble variable '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)

Une approche plus simple qui est aussi pratique avec un nombre élevé de colonnes:

Soit row une liste de valeurs à insérer qui peuvent contenir None. Pour l'insérer dans PostgreSQL nous procédez comme suit

values = ','.join(["'" + str(i) + "'" if i else 'NULL' for i in row])
cursor.execute('insert into myTable VALUES ({});'.format(values))
conn.commit()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top