使用 psycopg2 和 postgresql 构建动态 SQL 查询
Building dynamic SQL queries with psycopg2 and postgresql
我不太确定解决此问题的最佳方法,或者我是否只是在寻求一种比应有的更轻松的生活。我有一个 Web 应用程序的后端,我喜欢用原始 SQL 编写所有查询。例如获取特定的用户配置文件,或者我有这样的查询的一些用户:
SELECT accounts.id,
accounts.username,
accounts.is_brony,
WHERE accounts.id IN %(ids)s;
这真的很棒,因为我可以通过相同的查询获得一个用户配置文件或多个用户配置文件。现在我真正的查询几乎有 50 行长。此配置文件有很多连接和其他条件。
假设我想从用户个人资料中获取所有相同的信息,但我不想获取特定的用户 ID,而是想获取单个随机用户?我认为复制粘贴50行代码只是为了修改最后两行是没有意义的。
SELECT accounts.id,
accounts.username,
accounts.is_brony,
ORDER BY Random()
LIMIT 1;
有没有什么方法可以在构建查询时使用某种继承,以便最后我可以修改几个条件,同时保持核心相似性不变?
我确定我可以通过连接字符串等来管理它,但我很好奇是否有更广泛接受的方法来处理这种情况。 Google 让我失望了。
规范的答案是创建一个视图并在查询中将其与不同的 WHERE
和 ORDER BY
子句一起使用。
但是,根据您的查询和表,对于您的特殊情况,这可能不是一个好的解决方案。
在 WHERE accounts.id IN (1, 2, 3)
下非常快的查询可能在 ORDER BY random() LIMIT 1
下执行得非常糟糕。在这种情况下,您将不得不为第二个要求提出不同的查询。
我不太确定解决此问题的最佳方法,或者我是否只是在寻求一种比应有的更轻松的生活。我有一个 Web 应用程序的后端,我喜欢用原始 SQL 编写所有查询。例如获取特定的用户配置文件,或者我有这样的查询的一些用户:
SELECT accounts.id,
accounts.username,
accounts.is_brony,
WHERE accounts.id IN %(ids)s;
这真的很棒,因为我可以通过相同的查询获得一个用户配置文件或多个用户配置文件。现在我真正的查询几乎有 50 行长。此配置文件有很多连接和其他条件。
假设我想从用户个人资料中获取所有相同的信息,但我不想获取特定的用户 ID,而是想获取单个随机用户?我认为复制粘贴50行代码只是为了修改最后两行是没有意义的。
SELECT accounts.id,
accounts.username,
accounts.is_brony,
ORDER BY Random()
LIMIT 1;
有没有什么方法可以在构建查询时使用某种继承,以便最后我可以修改几个条件,同时保持核心相似性不变?
我确定我可以通过连接字符串等来管理它,但我很好奇是否有更广泛接受的方法来处理这种情况。 Google 让我失望了。
规范的答案是创建一个视图并在查询中将其与不同的 WHERE
和 ORDER BY
子句一起使用。
但是,根据您的查询和表,对于您的特殊情况,这可能不是一个好的解决方案。
在 WHERE accounts.id IN (1, 2, 3)
下非常快的查询可能在 ORDER BY random() LIMIT 1
下执行得非常糟糕。在这种情况下,您将不得不为第二个要求提出不同的查询。