如何将python嵌套字典中的多行插入sqlite db

我读取了一个 yaml 文件并将值提取到 python 列表中。我想将值转储到 sqlite 数据库中,并且列表的结构是嵌套的。我尝试了各种将数据存储在我的数据库中的方法,如下所示,但它们没有解决问题。


当格式列表 ('a','b','c') 时,我可以毫无问题地插入表中。但是当我有一个键值对时,我遇到了问题。


Data structure: 

 [   {   'CPU': 2,

    'jobname': 'Job1',

    'memory': '4 GB',

    'problem': 'Prob1',

    'team': '1'},

{   'CPU': 4,

    'jobname': 'Job2',

    'memory': '256 GB',

    'problem': 'Prob3',

    'team': '3'},

{   'CPU': 5,

    'jobname': 'Job3',

    'memory': '8 GB',

    'problem': 'Prob5',

    'team': '1'}]

这是我尝试过的,但看起来它们的数据结构略有不同:Python : How to insert a dictionary to a sqlite database?


# read data from the config file

def read_yaml(file):

    with open(file, "r") as stream:

        try:

            config = yaml.safe_load(stream)

        except yaml.YAMLError as exc:

            print(exc)

            print("\n")

    return config


    q = read_yaml("queue.yaml")


  # establish connection to sqlite database and save into db

 conn = sqlite3.connect('queues.db')

 c = conn.cursor()


 # create a sqlite3 database to store the dictionary values

 def create_table():

    c.execute("CREATE TABLE IF NOT EXISTS queues(job TEXT, team 

       TEXT, problem TEXT, CPU INT, memory TEXT)")


 create_table()


 # insert data into the table

def dynamic_data_entry():

    for item in q:

        c.execute("INSERT INTO queues VALUES (?, ?, ?, ?, ?)", item)

    conn.commit()


dynamic_data_entry()

这是输出错误:回溯(最近一次调用最后一次):


File "queue_info.py", line 50, in <module>

dynamic_data_entry()

File "queue_info.py", line 47, in dynamic_data_entry

c.execute("INSERT INTO queues VALUES (?, ?, ?, ?, ?)", item)

sqlite3.ProgrammingError: Binding 1 has no name, but you supplied a 

 dictionary (which has only names).


莫回无
浏览 364回答 1
1回答

慕婉清6462132

sqlite3支持字典使用占位符语法:[key]代替?。您还可以使用executemany代替for item in q:c.executemany("INSERT INTO queues (job, team, problem, CPU, memory) VALUES&nbsp; &nbsp; (:jobname, :team, :problem, :CPU, :memory);", data)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python