如何使用 Python 将 NULL 值插入 PostgreSQL 数据库?
Posted
技术标签:
【中文标题】如何使用 Python 将 NULL 值插入 PostgreSQL 数据库?【英文标题】:How to insert NULL values into PostgreSQL database using Python? 【发布时间】:2019-02-22 18:03:55 【问题描述】:我有这样的数据元组列表:
list1 = [(1100, 'abc', '"1209": "Y", "1210": "Y"'), (1100, 'abc', None)]
def insert_sample_data(col_val):
cur = self.con.cursor()
sql = """insert into sampletable values """.format(col_val)
cur.execute(sql)
self.con.commit()
cur.close()
values1 = ', '.join(map(str, list1)) #bulk insert
insert_sample_data(values1)
表结构: ssid int,名称 varchar,规则 jsonb
当我尝试插入数据但它抛出一个错误说“插入列“无”不存在”。我们如何将数据加载到“Null”或“None”的表中?
我查看了这个解决方案,但在这种情况下它没有帮助 How to insert 'NULL' values into PostgreSQL database using Python?
【问题讨论】:
为什么链接问题的解决方案在这种情况下不起作用?因为批量插入?为此,如果速度对您很重要,您应该使用executemany
或 execute_batch
。
【参考方案1】:
正如@shmee 所说,您需要使用executemany
之类的东西并参数化您的值,而不是使用容易受到SQL 注入攻击的format
。
我会修改你的代码如下:
def insert_sample_data(self, values): # added self since you are referencing it below
with self.con.cursor() as cur:
sql = "insert into sampletable values (%s, %s, %s)" # Use %s for parameters
cur.executemany(sql, values) # Pass the list of tuples directly
self.con.commit()
list1 = [(1100, 'abc', '"1209": "Y", "1210": "Y"'), (1100, 'abc', None)]
self.insert_sample_data(list1) # pass the list directly
【讨论】:
正如@shmee 所说,速度对我的流程来说非常重要,因为要插入至少 100k 到 100 万条记录,并且使用executemany
需要很多时间。我对你的代码做了一些修改,它就像一个魅力。谢谢@Nicarus以上是关于如何使用 Python 将 NULL 值插入 PostgreSQL 数据库?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Python 将 NULL 数据插入 MySQL 数据库?
在 SQL Server 中将值分配给类似列后,使用 SSIS 将 Oracle 表列更新为 Null
Python和SQL:用SQL的“Null”值替换DataFrame的空字符串,以将数据插入数据库中而不会出现格式错误[重复]