当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))
TypeError
为user_id
时,会导致None
例外。
使用NULL
驱动程序,如果值为None
,psycopg2
如何插入数据库?
答案 0 :(得分:39)
要将空值插入数据库,您有两个选择:
None
另外:为了防止SQL注入,你不应该对你的查询使用普通的字符串插值。
您应该将两(2)个参数传递给execute()
,例如:
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))
答案 1 :(得分:1)
对于当前的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)
是的,我将变量命名为“变量”。大声疾呼,想为此奋斗吗?
答案 2 :(得分:1)
一种更简单的方法,也适用于大量列:
让row
是要插入的值列表,其中可能包含None
。要将其插入到PostgreSQL中,请执行以下操作
values = ','.join(["'" + str(i) + "'" if i else 'NULL' for i in row])
cursor.execute('insert into myTable VALUES ({});'.format(values))
conn.commit()
答案 3 :(得分:0)
这是我的解决方案:
text = '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))
text = text.replace("nan", "null")
mycursor.execute(text)