当使用两个不同的数据库引擎时,Django SQL语法错误

ioekq8ef  于 2023-06-25  发布在  Go
关注(0)|答案(1)|浏览(124)

我尝试在多个数据库中使用django。一个默认的postgres-db和另一个mysql-db。我遵循了有关如何配置这两个dbs的文档:https://docs.djangoproject.com/en/4.0/topics/db/multi-db/
我的settings.py看起来像这样:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": "default",
        "USER": "----------",
        "PASSWORD": "-----------",
        "HOST": "localhost",
        "PORT": "5432",
    },
    "data": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "data",
        "USER": "---------",
        "PASSWORD": "---------",
        "HOST": "localhost",
        "PORT": "3306",
    }
}

在查询默认数据库时,一切都很正常。但似乎django使用postgres-db sql语法来查询mysql-db:

# Model "Test" lives in the mysql-db.
Test.objects.using('data').all()

# gives me the following exception

psycopg2.errors.SyntaxError: ERROR:  SyntaxError at ».«
LINE 1: EXPLAIN SELECT `test`.`id`, `test`.`title`, ...

它甚至使用postgres-db客户端psycopg 2来生成/执行它。
使用原始查询可以很好地工作,这意味着它确实正确地使用了特定查询的mysql-db。

Test.objects.using('data').raw('SELECT * FROM test')
# works

当使用不同引擎的多个数据库时,如何配置Django使用正确的SQL语法?
谢谢!

cclgggtu

cclgggtu1#

我在mssql和oracle上也遇到了同样的问题。Django为Oracle DB生成带有“[”&“]”符号的查询。我唯一想到的就是用

MyModel.objects.raw(m.query.__str__().replace('[', '"').replace(']', '"'))

相关问题