有没有办法在sqlite3中设置查询的占位符? 我有一些与数据库一起工作的函数,如果它们可以使用mysql和sqlite,它会更令人满意。 Mysql和Postgres python apis使用%s作为占位符,但sqlite3使用问号代替。
我正在寻找一种方法来使用相同的占位符,无论数据库引擎如何。
感谢您的帮助。
答案 0 :(得分:5)
更新以修复我之前关于如何使用paramstyle
全局
如果您使用的数据库模块遵循Python Database API Specification v2.0,则可以获得全局paramstyle
模块,其中应该是以下任何一个:
然后,您可以使用模块使用的占位符来编写SQL语句。你可以这样做:
import sqlite3
paramstyle = sqlite3.paramstyle
if paramstyle == 'qmark':
ph = "?"
elif paramstyle == 'format':
ph = "%s"
else:
raise Exception("Unexpected paramstyle: %s" % paramstyle)
sql = "INSERT INTO foo VALUES (%(ph)s, %(ph)s, %(ph)s)" % { "ph" : ph }
答案 1 :(得分:5)
底层库doesn't support %s
,因此需要手动替换。检查paramstyle
属性并使用适当的值替换查询中不同占位符的所有实例可能更容易。