Django中的Pickle数据库独立查询

时间:2017-11-17 17:50:58

标签: python sql django

首先,我知道我的问题重复了this个问题。但我说它不一样。

我需要保存用户"搜索过滤器"。据我所知,Django ORM为不同的DB创建特定的SQL查询。因此,如果我保存SQL查询,我就无法使用不同的SQL语法在其他数据库上迁移。 我错了吗? 如果没有,我怎样才能保存Django的查询方面而不需要DB?

2 个答案:

答案 0 :(得分:1)

简短的回答是,你是正确的 - 大多数情况下。如果Django编译查询的SQL方言与不同的后端不兼容,那么它将无法工作或可能无法预测。

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

编辑:好的,在这种情况下,我认为您根据评论和上述答案进入了正确的轨道。如果您正在解析查询字符串已经将其作为CharField保存在数据库中,那么在检索时只需使用它来构建Django QuerySet。如果我理解。

答案 1 :(得分:0)

如果你能提出更好的建议,我会打开谈话

所以... Pickle函数request.META["QUERY_STRING"] 不是最好的主意,以便为特定的DB保存SQL字符串。我认为这个问题的最佳解决方案是保存搜索参数。在我的情况下,它是GET字符串。我明白了:

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

保存到DB。

如果我需要它,我只需解析:

SearchTrustedForm()

另外,我使用不同的形式来验证此值(可选) Date Quote-Spread 0 2013-11-17 2.0 1 2013-12-10 8.0 2 2013-12-11 8.0 3 2014-06-01 5.0 4 2014-06-23 15.0 5 2014-06-24 45.0 6 2014-06-25 10.0 7 2014-06-28 20.0 8 2014-09-13 50000.0 9 2015-03-30 250000.0 10 2016-04-02 103780.0 11 2016-04-03 119991.0 12 2016-04-04 29994.0 13 2016-04-05 69993.0 14 2016-04-06 39997.0 15 2016-04-09 490321.0 16 2016-04-10 65485.0 17 2016-04-11 141470.0 18 2016-04-12 109939.0 19 2016-04-13 29983.0 20 2016-04-16 39964.0 21 2016-04-17 39964.0 22 2016-04-18 79920.0 23 2016-04-19 29997.0 24 2016-04-20 108414.0 25 2016-04-23 126849.0 26 2016-04-24 206853.0 27 2016-04-25 37559.0 28 2016-04-26 22817.0 29 2016-04-27 37506.0 30 2016-04-30 37597.0 31 2016-05-01 18799.0 32 2016-05-02 18799.0 33 2016-05-03 9400.0 34 2016-05-07 29890.0 35 2016-05-08 29193.0 36 2016-05-09 7792.0 37 2016-05-10 3199.0 38 2016-05-11 8538.0 39 2016-05-14 49937.0 ,因为如果数据结构已更改,我可以保存向后兼容性。