在 python 中编写通用 cursor.executemany()
Posted
技术标签:
【中文标题】在 python 中编写通用 cursor.executemany()【英文标题】:Writing Generic cursor.executemany() in python 【发布时间】:2021-02-04 04:15:11 【问题描述】:我是 python 新手,尝试编写一个通用函数,其参数为字典列表、表名、数据库用户名、密码,并将不同的数据插入到不同的表中,如下所示
dict_list=['name': 'sandeep', 'age': '10', 'name': 'sa', 'age': '0'] another_dict_list=['area': 'AP', 'pin': '00', 'area': 'UP', 'pin': '01']
def func(listofdict, tablename, dbusername, dbpassword):
#all connection and cursor code here#
query = """insert into tablename (dict keys) values(dict values)"""
cursor.executemany(query, listofdict)
现在我调用上面的函数
func(dict_list, nametable, dbuser, dbpassword)
func(another_dict_list ,areatable, dbuser, dbpassword)
想知道我们是否可以编写一个通用代码来使用 execute many 插入数据
【问题讨论】:
执行这个游标会给你一个AttributeError
,因为你传递了一个单一的参数并且期望很多,cursor.executemany(query, listofdict)
。因此,我认为如果您尝试将 listofdic
放入集合列表中以将数据库中的每个值插入到每一行中,就像 cursor.executemany(query, (listofdict,))
好的。我们可以使用 executemany 编写这样的通用代码吗?
Ofc,给我一点时间给你申请一个executemany
例子
【参考方案1】:
要访问list of dictionaries
的数据,您需要使用循环来执行此操作,导致其双重列表。
我使用sqlite3
创建了一个数据库,所以您可以联系我正在做的事情;
首先,我创建了数据库:
__author__ = "D/R"
import sqlite3
conn = sqlite3.connect("demo.sqlite", detect_types=sqlite3.PARSE_DECLTYPES)
conn.execute("CREATE TABLE IF NOT EXISTS dicListTable ("
"name TEXT NOT NULL,"
"age INTEGER NOT NULL)")
词典列表:
list_dic = ['name': 'sandeep', 'age': 10, 'name': 'sa', 'age': 14]
功能:
def func(list_of_dict):
cursor = conn.cursor()
query = "insert into dicListTable (name, age) VALUES (?, ?)"
for i in range(0, len(list_of_dict)):
cursor.executemany(query, ((list_of_dict[i]["name"], list_of_dict[i]["age"]),))
cursor.connection.commit()
调用函数
func(list_dic)
关闭数据库
conn.close()
输出
+---------+-----+
| name | age |
+---------+-----+
| sandeep | 10 |
+---------+-----+
| sa | 14 |
+---------+-----+
【讨论】:
【参考方案2】:假设字典列表至少包含一个条目并且每个条目具有相同的键,您可以执行以下操作:
def func(table_name, args):
names = list(args[0].keys())
column_names = ",".join(names)
bv_names = ",".join(":" + n for n in names)
sql = f"insert into table_name (column_names) values (bv_names)"
cursor.executemany(sql, args)
第一行假设 args 中至少有一个条目,并且它是一个字典,并且所有后续条目也是具有相同键的字典。如果这些假设中的任何一个不正确,则该函数将失败。
接下来的几行构建了您要使用绑定变量执行的 SQL。
【讨论】:
谢谢安东尼,我想要这种通用函数以上是关于在 python 中编写通用 cursor.executemany()的主要内容,如果未能解决你的问题,请参考以下文章
在 python 中编写通用 cursor.executemany()
使用 Python 和 mySQL(以及作为操作系统的 windows), cursor.execute() 不返回任何结果,但它正在连接