Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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 sqlalhemy使用for循环中的相同连接连接到postgres_Python_Postgresql_Sqlalchemy - Fatal编程技术网

Python sqlalhemy使用for循环中的相同连接连接到postgres

Python sqlalhemy使用for循环中的相同连接连接到postgres,python,postgresql,sqlalchemy,Python,Postgresql,Sqlalchemy,我的程序如下所示: 进口炼金术 engine=sqlalchemy.create_引擎(数据库_URI) ~z~一些密码~ 对于组中的组: ~z~一些密码~ 对于y中的x: query=~一些查询~ params=~一些params~ rows=engine.connect().execute(sqlalchemy.text(查询),参数) 这段代码在两个循环中工作,然后就卡住了。 在得到行之后我用它做了一个df,看起来还可以 使用此查询在postgres中进行检查: 选择pid,now()

我的程序如下所示:


进口炼金术
engine=sqlalchemy.create_引擎(数据库_URI)
~z~一些密码~
对于组中的组:
~z~一些密码~
对于y中的x:
query=~一些查询~
params=~一些params~
rows=engine.connect().execute(sqlalchemy.text(查询),参数)
这段代码在两个循环中工作,然后就卡住了。 在得到
行之后
我用它做了一个df,看起来还可以

使用此查询在postgres中进行检查:

选择pid,now()-pg_stat_activity.query_开始为dusration,pg_stat_activity.query,pg_stat_activity.state
来自pg_统计_活动
其中pg_stat_activity.state='active'
按pg_stat_activity.query_start DESC排序;
我可以看到有一个查询卡在活动中,我猜它在后面运行,这就是程序卡在活动中的原因

我找到了一些关于会话的帖子,但是找不到一个好的例子来说明如何使用,我也不能很好地理解这些文档,我不确定是不是正确的解决方案

我使用的查询是相同的,但每次运行时都有不同的参数


如果您能分享一些提示、链接以及任何可以帮助我解决问题的方法,我将不胜感激。

首先,只连接一次,然后使用
上下文管理器自动打开和关闭它:

导入sqlalchemy
engine=sqlalchemy.create_引擎(数据库_URI)
~z~一些密码~
使用engine.connect()作为连接:
对于组中的组:
~z~一些密码~
对于y中的x:
query=~一些查询~
params=~一些params~
rows=conn.execute(sqlalchemy.text(查询),参数)
其次,使用会话更安全,因为它们具有内置事务。只有当你总是只阅读的时候,才没有区别

第三,如果您没有使用SQLAlchemy ORM或核心功能,比如
session.query(User.id,User.name)
select([User.id,User.name])
,那么您只是在假装使用SQLAlchemy。我无意粗鲁,但如果您是在文本中编写SQL查询,并且只使用SQLAlchemy来执行它们,那么应该使用
psycopg2
如果是这种情况,请注意SQL注入

第三,嵌套循环中每个项一个查询会导致性能下降。如果可以避免,请将查询合并为一个查询。没有更多的上下文,我们无法帮助您做到这一点,但仅举一个例子:

对于品牌汽车:
对于车内车型。车型:
可以简化为



即使它返回的行数太多,或者您仍然需要进行一些后处理,这也很可能是值得的。

谢谢您的提示。我没有使用ORM,我正在为我们的客户自动化excel构建,它需要使用不同参数的函数查询数据库。因此,基本上,如果不是ORM,那么最好使用pscopg2并查询数据库?关于会话,你能给我介绍一个好的例子来理解如何使用它吗?我不确定会话是什么。是的,如果要硬编码查询,最好使用psycopg2,因为不管怎样,SQLAlchemy就是这么做的。炼金术是唯一的东西吗