有没有一种方法可以在sqlite3中设置查询的占位符?
我有一些与数据库一起使用的函数,如果它们可以同时与mysql和sqlite一起使用,那将更加令人满意。
Mysql和Postgres Python API使用%s作为占位符,但是sqlite3使用问号代替。
我正在寻找一种使用相同占位符的方法,无论使用哪个数据库引擎。
感谢您的帮助。
已更新以修复我之前关于如何使用paramstyle
全局变量的错误
如果您使用的DB模块遵循Python数据库API规范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 }
%s
,因此需要手动替换。更简单的方法是检查paramstyle
属性,并将查询中不同占位符的所有实例替换为相应的值。