我有这样的字典:
{'id': 8, 'name': 'xyzzy', 'done': False}表已经用正确的列名(字典的键)创建。如何在各自的列中插入值?我想为每个字典创建一个新行。
请注意,对于“完成”,定义的类型最初是Integer,因为sqlite不提供bool类型。
cur = connection().cursor()query = "insert .... tablename"发布于 2022-04-15 08:10:36
在Python中,数据库游标接受两个参数:
占位符可以是位置的或命名的:
# Positional placeholders: the order of values should match the order of
# placeholders in the statement. Values should be contained with
# a tuple or list, even if there is only one.
cur.execute("""SELECT * FROM tbl WHERE name = ? AND age = ?""", ('Alice', 42))
# Named placeholders: values and placeholders are matched by name, order
# is irrelevant. Values must be contained within a mapping (dict) of
# placeholders to values.
cur.execute(
"""SELECT * FROM tbl WHERE name = :name AND age = :age""",
{'age': 42, 'name': 'Alice'}
)您可以使用字典来执行游标,只要SQL语句中的值占位符使用:named格式(即以冒号“:”作为前缀的dict键,它就会执行正确的操作。
conn = sqlite3.connect()
cur = conn.cursor()
stmt = """INSERT INTO mytable (id, name, done) VALUES (:id, :name, :done)"""
cur.execute(stmt, {'id': 8, 'name': 'xyzzy', 'done': False})
# Call commit() on the connection to "save" the data.
conn.commit()此方法确保值在插入数据库之前被正确引用,并防止SQL注入攻击。
也请参阅文档
发布于 2022-04-15 06:07:29
您可以使用.format()方法插入查询字符串,但是这要简单得多。
dic = {'id': 8, 'name': 'xyzzy', 'done': False}
cur.execute("INSERT INTO tablename VALUES (:id,:name,:done)",{"id" : dic["id"],"name" : dic["name"],"done" : dic["done"]})
https://stackoverflow.com/questions/71880523
复制相似问题