如何使用Python向PostgreSQL数据库插入'NULL'值?
在把一个变量是 None
的时候,往 PostgreSQL 数据库里插入 NULL
键值,有没有好的做法呢?
运行这个查询:
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_id
是 None
的时候,会出现一个 TypeError
的错误。
那么,使用 psycopg2
驱动的时候,怎么才能在数据库里插入 NULL
呢?
4 个回答
3
这是我的解决方案:
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)
9
在现在的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)
72
要在数据库中插入 null
值,你有两个选择:
- 在你的插入语句中省略这个字段,或者
- 使用
None
另外:为了防止SQL注入,你不应该使用普通的字符串拼接来构建你的查询。
你应该给 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))