我有元组列表,其数据如下:
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,name varchar,rules jsonb
当我试图插入数据但它会抛出一个错误说“插入列”没有“不存在”。我们如何使用'Null'或'None'将数据加载到表中?
我看了解这个解决方案,但在这种情况下How to insert 'NULL' values into PostgreSQL database using Python?无济于事
正如@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