在python中编写泛型cursor.executemany()

2024-09-27 00:15:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,正在尝试编写一个通用函数,其中包含字典列表、tablename、dbusername、password等参数,并在不同的表中插入不同的数据,如下所示

dict_list=[{'name':'sandeep','age':'10'},{'name':'sa','age':'0'}] 另一个目录列表=[{'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)

想知道我们是否可以使用executemany编写插入数据的通用代码


Tags: 数据函数name列表agepinareacursor
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

要访问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 |
+    -+  -+

相关问题 更多 >

    热门问题