首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sqlite表中插入作为行的字典

在sqlite表中插入作为行的字典
EN

Stack Overflow用户
提问于 2022-04-15 05:45:50
回答 2查看 256关注 0票数 0

我有这样的字典:

代码语言:javascript
复制
{'id': 8, 'name': 'xyzzy', 'done': False}

表已经用正确的列名(字典的键)创建。如何在各自的列中插入值?我想为每个字典创建一个新行。

请注意,对于“完成”,定义的类型最初是Integer,因为sqlite不提供bool类型。

代码语言:javascript
复制
cur = connection().cursor()
代码语言:javascript
复制
query = "insert .... tablename"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-15 08:10:36

在Python中,数据库游标接受两个参数:

  1. 作为字符串的SQL语句:该语句可能包含占位符,而不是某些值,以处理直到运行时才知道值的情况。
  2. 要插入到SQL语句中的值集合。这些值在执行SQL语句时替换它中的占位符。

占位符可以是位置的或命名的:

代码语言:javascript
复制
# 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键,它就会执行正确的操作。

代码语言:javascript
复制
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注入攻击。

也请参阅文档

票数 2
EN

Stack Overflow用户

发布于 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"]})

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71880523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档