在 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。