Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django中的Pickle数据库独立查询_Python_Sql_Django - Fatal编程技术网

Python Django中的Pickle数据库独立查询

Python Django中的Pickle数据库独立查询,python,sql,django,Python,Sql,Django,首先,我知道我的问题是重复的。但我觉得这不一样 我需要保存用户“搜索过滤器”。据我所知,Django ORM为不同的数据库创建特定的SQL查询。所以,如果我保存SQL查询,我就不能在其他具有不同SQL语法的数据库上迁移。 我错了吗?如果没有,我如何在不访问DB的情况下保存查询的Django端?简短的回答是您基本上是正确的。如果Django为其编译查询的SQL方言与其他后端不兼容,那么它将无法工作,或者可能无法预测 要保存查询的Django端,为什么不保存您正在使用的实际filter()语句,或者

首先,我知道我的问题是重复的。但我觉得这不一样

我需要保存用户“搜索过滤器”。据我所知,Django ORM为不同的数据库创建特定的SQL查询。所以,如果我保存SQL查询,我就不能在其他具有不同SQL语法的数据库上迁移。
我错了吗?如果没有,我如何在不访问DB的情况下保存查询的Django端?

简短的回答是您基本上是正确的。如果Django为其编译查询的SQL方言与其他后端不兼容,那么它将无法工作,或者可能无法预测

要保存查询的Django端,为什么不保存您正在使用的实际
filter()
语句,或者保存您可以动态转换回来的语句的表示形式呢

编辑:好的,在这种情况下,根据评论和上面的答案,我认为你在正确的轨道上。如果您正在解析一个查询字符串,请将其作为
CharField
保存在数据库中,然后在检索时使用它来构建Django查询集。如果我能理解。

如果你能建议更好的解决方案,我愿意和你谈谈 所以。。。Pickle函数
.filter()
不是保存特定数据库的SQL字符串的最佳方法。我认为解决这个问题的最好办法是保存搜索参数。在我的情况下,这是得到字符串。我明白了:

request.META["QUERY_STRING"]
并保存到数据库

如果需要,我只需解析:

from django.http import QueryDict
QueryDict(request.META["QUERY_STRING"])

另外,我使用不同的表单来验证此值(可选)
SearchTrustedForm()
,因为如果数据结构已更改,我可以保存向后兼容性。

例如,如果我这样做:
a=Genre.objects.filter(id_uin=[1,10,20,8,9])b=pickle.dumps(a)
,filter函数的pickle序列化结果。所以我不明白你说的是什么意思:为什么不保存实际的filter()语句呢?那么你想保存结果还是语句呢?我以为你想要这个语句,但现在听起来你想保存QuerySet的结果。不,不,我只是想说带参数的过滤器序列化会返回结果。我需要对账单。对不起,我不能插入你的名字。“我不知道为什么。”瓦西里鲁辛不担心。我更新了我的答案,以反映我现在对这个问题的理解。是的,你是对的。所以现在这是我最好的主意,也许会更好。