有没有一种方法可以在SQLAlchemy连接字符串中指定Postgres模式?

4
我正在迁移一个现有的Python程序,它使用SQLAlchemy,但几乎完全是通过使用SQLAlchemy引擎来在Pandas数据框中使用(例如,pandas to_sql)。目前创建引擎时使用的连接字符串是另一个数据库的连接字符串(即MySQL),并且访问数据库(类似于Postgres架构)很容易。我应该如何在给定的引擎中最好地指定架构(而不仅仅是包含它们的Postgres数据库)?
编辑:有人似乎将这个问题标记为重复。但实际上不是这样。我不是要通过使用Sessions来自动生成查询语句;我是想创建连接字符串以便在Pandas的to_sql函数中使用SQLAlchemy引擎。

哦,我的错,我错误地复制了这个问题,尽管你问的是一个非常相似的问题。真正的答案是:你连接到数据库,而不是模式,所以你不需要在连接字符串中传递它。但是:如果底层数据库支持模式,DataFrame.to_sql()将使用“默认”schema作为关键字参数。你的数据库-模式类比是误导性的。模式将对象分隔到数据库中的命名空间中,并且用户可以访问DB中不同模式中的所有对象(给定权限)。 - Ilja Everilä
另外,您是否考虑过使用预连接引擎而不是将连接URL字符串作为to_sql()函数中的con参数。这样,在调用之间可以获得连接池等好处。如果使用引擎实例而不是连接字符串,则链接的重复实际上是有效的,因为您可以例如实现设置搜索路径的连接事件侦听器。 - Ilja Everilä
那么为什么这个不被标记为重复?你能做到这一点吗,请发表一个答案。目前我所知道的最干净的方法是在进行查询之前,在连接中发出SQL语句“set search_path=your_schema_name”。 - Anatoly Alekseev
1个回答

1
你可以使用Blaze连接至PostgreSQL,并从SQLAlchemy获取元数据。
from blaze import data
from sqlalchemy import MetaData
ds = data(MetaData('postgresql://localhost/test', schema='my_schema')) 

在使用blaze之前,通过以下方式安装它:

pip install blaze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接