当前位置:首页 > 数据库 > SQlite

将python字典插入SQLite数据库

我有一本字典,想要将所有值添加到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,查询时带有“?”占位符execute()方法会根据参数类型自动进行右转义.因此,以下应工作:

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

【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!