【发布时间】:2020-05-18 20:47:30
【问题描述】:
我正在使用 Django 构建一个应用程序,它依赖于几个我不管理的 PosgreSQL 数据库,我们称它们为数据库 A 和数据库 B。对于每个数据库,我都使用了python manage.py inspectdb 来构建我的models.py 文件。
我正在尝试使用 Django ORM 来执行以下查询(此处已大大简化),to_date 是 datetime.datetime 对象:
sample = my_model_in_B.objects\
.filter(a_column=instance_of_a_model_in_A.name)\
.exclude(another_column='Useless things')\
.filter(a_column_with_dates__lte=to_date)
我的问题是它会产生以下 SQL 查询:
SELECT "myschema"."mytable"."a_column", "myschema"."mytable"."another_column" from "myschema"."mytable"
WHERE "myschema"."mytable"."a_column" = Here is the name of instance_of_a_model_in_A
AND "myschema"."mytable"."a_column_with_dates" <= 2020-02-03
AND NOT ("myschema"."mytable"."another_column" = Useless things
AND "myschema"."mytable"."another_column" IS NOT NULL))
换句话说,我的问题是 Django ORM 不会在我需要的地方自动添加引号。我不明白我做错了什么。我不知道这是否重要,但请注意:
- 我使用 Django 2.2。而我的数据库 B 仅是 POSTGRESQL 8,
- 我使用的所有列都对应于我的模型中的
CharField,除了对应于DateField的a_column_with_dates。
任何帮助表示赞赏。提前谢谢你。
【问题讨论】:
-
您找到解决方案了吗?我发现了这个问题code.djangoproject.com/ticket/17612,但它已有 10 年历史,并且由于指向文档中提到您应该手动转义此类事情的链接无效而被关闭,因为底层数据库驱动程序可能是问题的原因,而不是 django。但该链接现在也已断开。
-
@Som-1 是的,我可能找到了对你有帮助的东西,请在下面查看我的答案。
标签: django postgresql orm