Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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 使用psycopg2和postgresql构建动态SQL查询_Python_Sql_Postgresql_Psycopg2 - Fatal编程技术网

Python 使用psycopg2和postgresql构建动态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行长。对于此配

我真的不确定最好的方法是什么,或者我只是想要一种比它应该更容易的生活。我有一个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;
是否有某种方法可以在构建查询时使用某种类型的继承,以便最终可以修改几个条件,同时保持核心相似性不变


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

标准答案是创建一个视图,并在查询中使用不同的
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这是有道理的。将查询粘贴到子查询中会对性能产生很大影响吗?当我有时间的时候,我试着自己测试它。这取决于“核心查询”和查询计划器。我会通过博士后解释,看看它会吐出什么谢谢。这就是我现在所做的。我只需要使用大量虚拟数据来测试结果,以确保未来不会出现性能问题。谢谢。这就是我现在所做的。我只需要用大量的虚拟数据来测试结果,以确保未来不会出现性能问题。