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

时间:2010-11-20 06:21:50

标签: python postgresql null psycopg2 nonetype

当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驱动程序,如果值为Nonepsycopg2如何插入数据库?

4 个答案:

答案 0 :(得分:39)

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

  1. 从INSERT语句或
  2. 中省略该字段
  3. 使用None
  4. 另外:为了防止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)