Python 使用psycopg2和postgresql构建动态SQL查询
我真的不确定最好的方法是什么,或者我只是想要一种比它应该更容易的生活。我有一个web应用程序的后端,我喜欢用原始SQL编写所有查询。例如,获取一个特定的用户配置文件或多个用户,我有一个如下查询:Python 使用psycopg2和postgresql构建动态SQL查询,python,sql,postgresql,psycopg2,Python,Sql,Postgresql,Psycopg2,我真的不确定最好的方法是什么,或者我只是想要一种比它应该更容易的生活。我有一个web应用程序的后端,我喜欢用原始SQL编写所有查询。例如,获取一个特定的用户配置文件或多个用户,我有一个如下查询: SELECT accounts.id, accounts.username, accounts.is_brony, WHERE accounts.id IN %(ids)s; 这真的很好,因为我可以用同一个查询获得一个或多个用户配置文件。现在我真正的查询实际上差不多有50行长。对于此配
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;
是否有某种方法可以在构建查询时使用某种类型的继承,以便最终可以修改几个条件,同时保持核心相似性不变
我确信我可以通过连接字符串之类的方法来管理它,但我很好奇是否有一种更广泛接受的方法来处理这种情况。谷歌让我失望。标准答案是创建一个视图,并在查询中使用不同的
WHERE
和ORDER BY
子句
但是,根据您的查询和表,对于您的特殊情况,这可能不是一个好的解决方案
(1,2,3)中的
WHERE accounts.id的查询速度极快,而ORDER BY random()LIMIT 1
可能会执行得非常糟糕。在这种情况下,您必须为第二个需求提出不同的查询。标准答案是创建一个视图,并在查询中使用不同的WHERE
和ORDER BY
子句
但是,根据您的查询和表,对于您的特殊情况,这可能不是一个好的解决方案
(1,2,3)
中的WHERE accounts.id的查询速度极快,而ORDER BY random()LIMIT 1
可能会执行得非常糟糕。在这种情况下,您必须为第二个需求提出不同的查询。子查询?类似于select*from()作为t顺序,由random()限制1代码>这是有道理的。将查询粘贴到子查询中会对性能产生很大影响吗?当我有时间的时候,我试着自己测试它。这取决于“核心查询”和查询计划器。我将通过postgres explain来运行这两个程序,看看它在子查询中有什么作用?类似于select*from()作为t顺序,由random()限制1代码>这是有道理的。将查询粘贴到子查询中会对性能产生很大影响吗?当我有时间的时候,我试着自己测试它。这取决于“核心查询”和查询计划器。我会通过博士后解释,看看它会吐出什么谢谢。这就是我现在所做的。我只需要使用大量虚拟数据来测试结果,以确保未来不会出现性能问题。谢谢。这就是我现在所做的。我只需要用大量的虚拟数据来测试结果,以确保未来不会出现性能问题。