web-dev-qa-db-ja.com

Pythonを使用して 'NULL'値をPostgreSQLデータベースに挿入する方法

Pythonで変数がNULLであるときにNoneキー値をPostgreSQLデータベースに入力するための良い方法はありますか?

このクエリを実行する:

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

user_idTypeErrorの場合、None例外が発生します。

psycopg2ドライバを使用して、値がNULLのときにNoneをデータベースに挿入するにはどうすればよいですか?

27
xpanta

データベースにnull値を挿入するには、2つのオプションがあります。

  1. iNSERTステートメントからそのフィールドを除外する、または
  2. Noneを使用

また、SQLインジェクションを防ぐために、クエリに通常の文字列補間を使用しないでください。

execute()に2つの引数を渡す必要があります。例:

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

現在のpsycopgでは、Noneの代わりに、 '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