Python 使用sqlalchemy访问postgres中模式的最佳方法

Python 使用sqlalchemy访问postgres中模式的最佳方法,python,database,postgresql,sqlalchemy,Python,Database,Postgresql,Sqlalchemy,我正在使用Postgres数据库。此数据库有三个架构(schema_1,schema_2,public)。如果我运行一个简单的查询,默认情况下将查询public模式: from sqlalchemy import create_engine con = create_engine('postgresql+pg8000://usr:pwd@server/db') con.execute('select count(*) from the_table') 我无法访问schema_1或schema

我正在使用Postgres数据库。此数据库有三个架构(
schema_1
schema_2
public
)。如果我运行一个简单的查询,默认情况下将查询
public
模式:

from sqlalchemy import create_engine
con  = create_engine('postgresql+pg8000://usr:pwd@server/db')
con.execute('select count(*) from the_table')
我无法访问
schema_1
schema_2
中的表,除非我在查询中指定路径:

con.execute('select count(*) from schema_1.the_table')
是否有任何方法可以指定查询到
schema_1
的默认路径,而无需在查询本身中指定完整路径

我试过:

con.execute('SET search_path TO "schema_1";')
但这似乎不起作用:

insp = inspect(con)
print(insp.default_schema_name)
# 'public'

我相信我没有正确地执行
将搜索路径设置为“schema_1”
,因为相同的命令在其他Postgres客户端(如pgAdmin)中也可以使用。

我不认为这是您所认为的(“返回当前引擎数据库用户用方言表示的默认模式名”)。在设置搜索路径后,您是否确实尝试过执行一些使用schema_1中的表的语句?我尝试过了,但我得到一个错误
42P01
说该表不存在,但是“检查”属性将反映由
ALTER ROLE set search\u path to…
设置的设置,而不是会话的当前设置。但这只是我的观点。注意引擎不是一个连接。AnttiHaapala指出,你实际上是在使用引擎,而不是连接。因此,使用(可能的)新连接执行每个查询。当引擎完成连接时,它将返回到池并回滚。这将重置搜索路径。我不认为它是您所认为的(“返回当前引擎数据库用户的方言提供的默认模式名”)。在设置搜索路径后,您是否确实尝试过执行一些使用schema_1中的表的语句?我尝试过了,但我得到一个错误
42P01
说该表不存在,但是“检查”属性将反映由
ALTER ROLE set search\u path to…
设置的设置,而不是会话的当前设置。但这只是我的观点。注意引擎不是一个连接。AnttiHaapala指出,你实际上是在使用引擎,而不是连接。因此,使用(可能的)新连接执行每个查询。当引擎完成连接时,它将返回到池并回滚。这将重置搜索路径。