Python:如何将字典插入sqlite数据库?

ave*_*137 8 python sqlite dictionary

我有一个sqlite数据库,其中包含以下列的表:

id(int) , name(text) , dob(text)
Run Code Online (Sandbox Code Playgroud)

我想在其中插入以下字典:

{"id":"100","name":"xyz","dob":"12/12/12"}
Run Code Online (Sandbox Code Playgroud)

字典键是列名.我怎样才能实现它?

Gar*_*ber 8

查看此处的文档,您可以添加一行:

c.execute("INSERT INTO stocks VALUES (?,?,?)", [dict["id"], dict["name"], dict["dob"]])
Run Code Online (Sandbox Code Playgroud)

或者您可以使用列表并一次添加多行:

# Larger example that inserts many records at a time
purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
             ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
             ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
            ]
c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
Run Code Online (Sandbox Code Playgroud)

  • 也许更新这个以显示如何插入提问者的词典列表?有了这个,我认为你的答案比我的好. (2认同)

him*_*elf 7

这是一种保持参数安全的方法.(可能需要在tablename部门进行抛光)

def post_row(conn, tablename, rec):
    keys = ','.join(rec.keys())
    question_marks = ','.join(list('?'*len(rec)))
    values = tuple(rec.values())
    conn.execute('INSERT INTO '+tablename+' ('+keys+') VALUES ('+question_marks+')', values)

row = {"id":"100","name":"xyz","dob":"12/12/12"}
post_row(my_db, 'my_table', row)
Run Code Online (Sandbox Code Playgroud)


J. *_*lon 7

要直接使用字典,您可以执行以下操作:

user1 = {"id":100, "name": "Rumpelstiltskin", "dob": "12/12/12"}
c.execute("INSERT INTO users VALUES (:id, :name, :dob)", user1) 
Run Code Online (Sandbox Code Playgroud)

与实例/模型一起使用:

class User:                                                                      

    def __init__(self, name, dob):                                            
        self.name = name                                                             
        self.dob = dao  

u1 = User("Rumpelstiltskin", "12/12/12")
c.execute("INSERT INTO users VALUES (:name, :dob)", u1.__dict__)
Run Code Online (Sandbox Code Playgroud)

id 是 Python 中的关键字,因此如果您想将其用作实例变量的标识符,我建议您使用 _id(与表的主键名称相同)。


Eli*_*all 6

例如,如果 ,c = conn.cursor()并且您的字典已命名dict并且您的表为tablename,那么您可以编写

c.execute('insert into tablename values (?,?,?)', [dict['id'], dict['name'], dict['dob']])
Run Code Online (Sandbox Code Playgroud)

这将根据需要将字典的元素插入表中。