Python sqlite3 占位符

标签 python mysql sqlite placeholder

有没有办法在 sqlite3 中设置查询的占位符? 我有一些与数据库一起工作的函数,如果它们可以同时与 mysql 和 sqlite 一起工作,那就更令人满意了。 Mysql 和 Postgres python api 使用 %s 作为占位符,但 sqlite3 使用问号代替。

我正在寻找一种方法来使用相同的占位符,无论数据库引擎如何。

感谢您的帮助。

最佳答案

已更新以修复我之前关于如何使用 paramstyle global

的错误

如果您使用的数据库模块遵循 Python Database API Specification v2.0 ,您可以获得模块全局 paramstyle ,它应该是以下任何一个:

  1. 'qmark' 问号样式, 例如'...WHERE name=?'
  2. 'numeric' 数字,位置样式, 例如'...WHERE name=:1'
  3. 'named' 命名样式, 例如'...WHERE name=:name'
  4. 'format' ANSI C printf 格式代码, 例如'...WHERE name=%s'
  5. '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/

相关文章:

python - 部署到 AWS lambda 达到大小限制并且包(例如 numpy)不兼容

android - 无法将现有 SQLite 数据库导入 Android 应用程序

sqlite shell 报告 CPU 时间 : what are the units?

objective-c - 在 SQLite 语句中使用 NSArray

mysql - 根据信息模式的查询结果在 mydatabase 中创建表

python - 匹配列表中的项目 - Python

c++ - 我们如何正确实现 C++ 子类对象的 Python 绑定(bind)?

python - 在 Django Web 项目中,我的应用程序无法识别

php - 使用可选参数构建 SQL 语句

mysql - DECLARE 在此位置无效,需要 EOF