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