回答

收藏

将python字典插入SQLite数据库

技术问答 技术问答 212 人阅读 | 0 人回复 | 2023-09-14

我有一个字典,我想添加所有值sqlite数据库中。字典中的所有键都存在于数据库中,所有键都是字符串。然而,在输入数据库时遇到了麻烦。每当下面的代码遇到字符串中的字符串时,它们都是丑陋的、不安全的、错误的,但它们可以正常工作。4 A( i* ^$ _3 D! e1 C
Query="INSERT INTO packages VALUES("    for tag in Tags:       Query=Query   '"'   Package[tag]   '",'    Query=Query[:-2] ")"cursor.execute(Query)我怎样才能优雅地解决这个问题,让它安全地接受字符串中的输入?我还遇到了其他几种方法。# K1 r& A& U  `' w
fields = Package.keys()values = Package.values()query = "INSERT INTO packages (%s) VALUES (%%s);" % (",".join(fields))cursor.execute(query,values)但是会导致类型错误。# w4 L: g! M0 t7 w
TypeError: function takes at most 2 arguments (38 given)到目前为止,我遇到的最优雅的解决方案似乎是
2 X/ m( W) |. }: E. Fsql_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)但这会导致操作错误,说) ^7 _" d$ L2 n: X7 H
sqlite3.OperationalError: near "%": syntax error第三,我的问题是如何安全地将字典中的值添加到数据库中?
  |# ?: `: w7 E, m: x# E0 L, ?  F2 DPS也许我也应该注意,我正在使用它Python 2.5.1。4 J) L3 E% G! u$ [
                                                               
: p/ x5 g; |1 p* }" g    解决方案:                                                                8 K) k  g' u6 D8 Z: ?+ r  t( @2 M
                                                                Afaik,当查询中带有“?”时 占位符execute()该方法将根据参数类型自动进行正确的转换。因此,以下工作:
. E, |7 F  \4 X* bquery = 'INSERT INTO packages VALUES(%s)'.join * len(Tags))cursor.execute(query,Tags)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则