我有一个数据库,其中有两列 sess_id 和数据。现在我想从py到db插入一个列表我应该怎么做。 假设这是要插入列表的数据列的列表。 database_list = ['elem1','elem2','elem3'...]
这已经完成但没有进展:
cursor_three=conn.cursor()
cursor_three.execute('INSERT INTO table (data) VALUES (database_list)')
cursor_three.commit()
答案 0 :(得分:0)
取决于你想做什么。如果要将值列表插入到一列中,可以循环遍历列表并逐行插入。您也可以使用executemany而不是execute。
如果你直接输入列表然后使用excutemany,否则如果你在列表中循环使用execute。
cursor.executemany("""
INSERT INTO table
(data)
VALUES (?)
""", data_list)
OR
for i in data_list:
cursor.execute("INSERT INTO table (data) VALUES (?)", i)
答案 1 :(得分:0)
您应该像这样迭代列表:
cursor_three=conn.cursor()
for elem in database_list:
cursor_three.execute('INSERT INTO table (data) VALUES (%s)' % elem)
cursor_three.commit()
之后,除非您将 sess_id 列声明为自动增量行,否则它将为空。如果您有两个已排序的数组,例如
database_id_list = [212, 444, 532...]
database_data_list= ['elem212','elem444','elem532'...]
您应该使用 zip()函数以相似的方式迭代它们,如下所示:
for elem in zip(database_id_list, database_data_list):
cursor_three.execute('INSERT INTO table (sess_id, data) VALUES (%s, %s)' % elem) # elem is tuple here
请注意,此代码使用字符串fromat函数来简化(您没有注意到您正在使用哪个数据库)并且它不受 SQL注入的保护。您最好使用sql deriver的格式化程序,例如psycopg2:
cursor_three.execute('INSERT INTO table (data) VALUES (%s)', [elem])