如何使用Python将'NULL'值插入PostgreSQL数据库?

问题描述 投票:21回答:2

当变量是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))

TypeErroruser_id时,导致None异常。

当值为NULL时,如何使用None驱动程序将psycopg2插入数据库?

python postgresql null psycopg2 nonetype
2个回答
39
投票

要将空值插入数据库,您有两个选择:

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

2
投票

使用当前的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)

是的,我将变量命名为'variable'。大呐喊,想要争吵吗?

© www.soinside.com 2019 - 2024. All rights reserved.