有没有办法在 sqlite3 中设置查询的占位符? 我有一些与数据库一起工作的函数,如果它们可以同时与 mysql 和 sqlite 一起工作,那就更令人满意了。 Mysql 和 Postgres python api 使用 %s 作为占位符,但 sqlite3 使用问号代替。
我正在寻找一种方法来使用相同的占位符,无论数据库引擎如何。
感谢您的帮助。
最佳答案
已更新以修复我之前关于如何使用 paramstyle
global
如果您使用的数据库模块遵循 Python Database API Specification v2.0 ,您可以获得模块全局 paramstyle
,它应该是以下任何一个:
- 'qmark' 问号样式, 例如'...WHERE name=?'
- 'numeric' 数字,位置样式, 例如'...WHERE name=:1'
- 'named' 命名样式, 例如'...WHERE name=:name'
- 'format' ANSI C printf 格式代码, 例如'...WHERE name=%s'
- 'pyformat' Python 扩展格式代码, 例如'...WHERE name=%(name)s'
然后您可以使用模块使用的占位符编写 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 }
关于Python sqlite3 占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12184118/