在 python 中编写通用 cursor.executemany()
Writing Generic cursor.executemany() in python
我是 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 编写用于插入数据的通用代码
要访问 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 |
+---------+-----+
假设字典列表至少包含一个条目,并且每个条目都有相同的键,您可以执行以下操作:
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 的新手,正在尝试编写一个通用函数,其参数为字典列表、表名、数据库用户名、密码,并将不同的数据插入到不同的表中,如下所示
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 编写用于插入数据的通用代码
要访问 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 |
+---------+-----+
假设字典列表至少包含一个条目,并且每个条目都有相同的键,您可以执行以下操作:
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。