我有一个带有以下列的表的sqlite数据库:
id(int) , name(text) , dob(text)
我想在其中插入以下词典:
{"id":"100","name":"xyz","dob":"12/12/12"}
字典键是列名。我怎样才能实现它?
答案 0 :(得分:8)
查看文档here,您可以添加一行:
c.execute("INSERT INTO stocks VALUES (?,?,?)", [dict["id"], dict["name"], dict["dob"]])
或者您可以使用列表并一次添加多行:
# 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)
答案 1 :(得分:6)
这是一种保持参数安全的方法。 (可能需要在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)
答案 2 :(得分:4)
例如,如果c = conn.cursor()
,您的字典名为dict
,而您的表格tablename
,那么您可以写
c.execute('insert into tablename values (?,?,?)', [dict['id'], dict['name'], dict['dob']])
将根据需要将字典元素插入表格中。
答案 3 :(得分:3)
要直接使用词典,您可以执行以下操作:
user1 = {"id":100, "name": "Rumpelstiltskin", "dob": "12/12/12"}
c.execute("INSERT INTO users VALUES (:id, :name, :dob)", user1)
与实例/模型一起使用:
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__)
id是Python中的关键字,因此,如果您想将其用作实例变量的标识符,我建议您使用_id(与表的主键名称相同)。
答案 4 :(得分:1)
根据Gareth的回复,如果您使用MySQLdb
,则可以使用executemany
并传递一个值列表,您可以使用{{1}直接从dict
获取这些值}}