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

59 投票
4 回答
97539 浏览
提问于 2025-04-16 07:22

在把一个变量是 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_idNone 的时候,会出现一个 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 值,你有两个选择:

  1. 在你的插入语句中省略这个字段,或者
  2. 使用 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))

撰写回答