我有一个字典,想要将其中所有的值添加到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版本。
Tags
是一个字典,就像OP正在使用的那样,否则Tags
只会传递键名,并且它们将以任意顺序出现。 - Mark Tolonen