使用psycopg2和postgresql构建动态SQL查询

时间:2017-01-12 22:25:05

标签: python sql postgresql psycopg2

我不确定最好的解决方法,或者我只是想要一个比它应该更容易的生活。我有一个Web应用程序的后端,我喜欢用原始SQL编写所有查询。例如,获取特定用户配置文件或许多用户,我有这样的查询:

SELECT accounts.id,
    accounts.username,
    accounts.is_brony,
ORDER BY Random()
LIMIT 1;

这非常好,因为我可以获得一个用户配置文件,或许多具有相同查询的用户配置文件。现在我的真实查询实际上差不多有50行。它有很多连接和其他条件。

让我们说我想从用户个人资料中获取所有相同的信息但是我想获得一个随机用户而不是获得特定的用户ID?我不认为复制和粘贴50行代码只是为了修改最后两行。

{{1}}

有没有办法在构建查询时使用某种继承,这样最后我可以修改几个条件,同时保持核心相似性相同?

我确信我可以通过连接字符串来管理它,但我很好奇是否有更广泛接受的方法来处理这种情况。谷歌让我失望。

1 个答案:

答案 0 :(得分:2)

规范的答案是创建一个视图,并在查询中使用不同的WHEREORDER BY子句。

但是,根据您的查询和表格,这对您的特殊情况可能不是一个好的解决方案。

使用WHERE accounts.id IN (1, 2, 3)速度极快的查询可能会与ORDER BY random() LIMIT 1进行异常严重的搜索。在这种情况下,您必须针对第二个要求提出不同的查询。