是有一个很好的做法进入 NULL 关键值PostgreSQL数据库时,一个变量 None 在蟒蛇?

运行这种查询:

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_idNone.

怎么可能 NULL 是插入到数据库时,一个价值是 None, 使用的 psycopg2 司机?

有帮助吗?

解决方案

插入空值的数据库中你有两个选择:

  1. 省略这一领域从你插入语句,或者
  2. 使用 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))

其他提示

使用当前psycopg,代替无,使用一个变量设置为 '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)

一个更简单的方法,其还与高数量的列实用:

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()
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top