【发布时间】:2026-02-05 06:30:01
【问题描述】:
我有一个超过 80 行的原始 SQL 查询,我无法使用查询集重现这些结果。我现在想让这个查询与 SQLite 和 PostgreSQL 兼容,这样它就可以在开发和生产环境中运行。
是否有任何推荐或内置的方法来继续?
示例
因此,例如,我得到了这个 PostgreSQL 语法错误:
operator does not exist: boolean = integer
我调整了语法并使用了一些条件来为每种情况获取正确的 SQL 字符串,但这对我来说是错误的:
db_engine = ''
engine = settings.DATABASES['default']['ENGINE']
if re.match('.*sqlite3$', engine):
db_engine = 'sqlite3'
elif re.match('.*psycopg2$', engine):
db_engine = 'postgresql'
elif re.match('.*mysql$', engine):
db_engine = 'mysql'
cursor = connection.cursor()
cursor.execute("""
... some big query here ...
WHERE 1=1
AND some_boolean_field = %(value)s
""" % {
'value': 'TRUE' if db_engine == 'postgresql' else '1'
})
【问题讨论】:
-
我会这样做 - 使用 sring 格式仅更改查询的选定部分,具体取决于 settings.DEBUG 是真还是假
标签: sql django sqlite postgresql