【发布时间】:2017-09-01 02:32:30
【问题描述】:
我目前正在迁移一个使用 SQLAlchemy 的现有 Python 程序,但几乎完全通过使用 SQLAlchemy 引擎在 Pandas 数据帧中使用(例如,pandas to_sql)。目前用于创建引擎的连接字符串是另一个数据库(即 MySQL)的连接字符串,访问数据库(类似于 Postgres 模式)很容易完成。我如何最好地在给定引擎中指定架构(而不仅仅是包含它们的 Postgres 数据库)?
编辑:似乎有人将此问题标记为重复。它不是。我不希望使用 Sessions 自动生成查询;我正在寻找创建连接字符串以创建用于 Pandas 的 to_sql 函数的 SQLAlchemy 引擎。
【问题讨论】:
-
嗯,虽然你问的是一个非常相似的问题,但我不正确地复制了这个。真正的答案是:您连接到数据库,而不是模式,因此您不会在连接字符串中传递它。但是:
DataFrame.to_sql()采用“默认”schema作为关键字参数,如果基础数据库支持模式。您的数据库 - 模式模拟具有误导性。架构将对象与数据库中的命名空间分开,用户可以访问数据库中不同架构中的所有对象(给定权限)。 -
另外,您是否考虑过使用预连接引擎而不是连接 url 字符串作为
con的参数to_sql()。您将获得呼叫之间连接池等的好处。此外,如果使用引擎实例而不是连接字符串,则链接副本实际上是有效的,因为您可以例如实现设置搜索路径的连接事件侦听器。 -
那么为什么这没有被标记为重复呢?你能做到这一点,让我们发布一个答案。据我所知,目前最干净的方法是在进行查询之前使用您的连接发出 sql 语句“set search_path=your_schema_name”。
标签: python postgresql pandas sqlalchemy