python - 将 python 字典插入 SQLite 数据库

标签 python sql database sqlite dictionary

我有一本字典,我想将所有值添加到 sqlite 数据库中。字典中的所有键都存在于数据库中,并且所有键都是字符串类型。然而,我在将值输入数据库时​​遇到了问题。下面的代码是丑陋的、不安全的,并且每当它遇到一个带有 "的字符串时就会出错,但它有点工作。

Query="INSERT INTO packages VALUES("
    for tag in Tags:
       Query=Query + '"' + Package[tag] + '", '
    Query=Query[:-2]+")"
cursor.execute(Query)

我怎样才能优雅地解决这个问题,使其安全并接受字符串中带有 "的输入?我遇到了一些其他方法。例如:

fields = Package.keys()
values = Package.values()
query = "INSERT INTO packages (%s) VALUES (%%s);" % (",".join(fields))
cursor.execute(query, values)

但是它会抛出一个类型错误。

TypeError: function takes at most 2 arguments (38 given)

到目前为止我遇到的最优雅的解决方案似乎是

sql_insert = ('INSERT INTO packages (%s) VALUES (%s)' % 
             (','.join('%s' % name for name in Package),
             ','.join('%%(%s)s' % name for name in Package)))
cursor.execute(sql_insert, Package)

但它抛出一个操作错误,说

sqlite3.OperationalError: near "%": syntax error

再一次,我的问题是如何优雅安全地将字典中的值添加到数据库中?

附言可能还值得注意的是,我使用的是 Python 2.5.1。

最佳答案

Afaik,当查询有一个“?” placeholder execute() 方法根据参数类型自动正确转义。因此,以下应该有效:

query = 'INSERT INTO packages VALUES(%s)' % ','.join(['?'] * len(Tags))
cursor.execute(query, Tags)

关于python - 将 python 字典插入 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8814250/

相关文章:

javascript - 使用 jinja2 从 python 列表创建 javascript 列表

mysql - 有没有办法使用2列来唯一标识MYSQL中的一行?

Mysql根据等级DESC和经验DESC计算排名

sql - 通过单次扫描对昂贵的表表达式进行多次选择

SQL删除列中具有相同值的行

database - ElasticSearch "match_all"慢, "from"> 1M,+10M 文档

python - 使用 Selenium 提取星级

python - nose2 中是否存在 assertRaises(或 assert_raises)

python - Django覆盖模型形式中外键字段的显示名称

database - 我应该将图像二进制数据保存到数据库还是将图像保存为文件?