当前位置: 首页 > 面试题库 >

将python字典插入SQLite数据库

韦阳晖
2023-03-14
问题内容

我有一个字典,想要将所有值添加到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

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

PS也许还应该注意,我正在使用Python 2.5.1。


问题答案:

Afaik,当查询中带有“?”时 占位符execute()方法会根据参数类型自动进行正确的转义。因此,以下应该工作:

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


 类似资料:
  • 问题内容: 我读到这里:使用Python将CSV文件导入sqlite3数据库表 似乎每个人都建议使用逐行读取,而不是使用SQLite的bulk .import。但是,如果您有数百万行的数据,这将使插入速度非常慢。还有其他方法可以避免这种情况吗? 更新:我尝试下面的代码逐行插入,但是速度不如我预期的那样。反正有改进的地方吗 问题答案: 使用生成器表达式将您的数据即时划分为多个块,在事务内进行插入。这

  • 问题内容: 我有如下的Python字典: 键是Unicode日期,值是整数。我想通过将日期及其对应的值作为两个单独的列将其转换为pandas数据框。示例:col1:日期col2:DateValue(日期仍为Unicode,日期值仍为整数) . 对此方向的任何帮助将不胜感激。我找不到有关熊猫文档的资源来帮助我。 我知道一种解决方案可能是将此dict中的每个键值对转换为dict,以便整个结构成为dic

  • 问题内容: 我有一个包含3行的列表,每行分别代表一个表行: 如何将此列表插入表中? 我的表结构是: 还是我应该使用列表以外的其他东西? 这是实际的代码部分: 分别插入三个字段是可行的,但是使用单行 要么 才不是。 问题答案:

  • 问题内容: 我正在尝试将嵌套的字典写入.csv文件。这是一个简单的示例: 这使我得到一个包含两列的表:第一个包含; 第二个包含[2,1,1](或子词典中的相应值)。我想要一个有四列的表:一列对应的列表元素,然后三列对应的列表元素。 问题答案: 更改: 至: 否则,您会尝试向csv编写类似的内容,而您的意思是。 如Padraic所述,您可能希望更改为或避免随机行为。

  • 本文向大家介绍Android 将数据插入数据库,包括了Android 将数据插入数据库的使用技巧和注意事项,需要的朋友参考一下 示例