【问题标题】:Is there a way to specify Postgres schemas in SQLAlchemy connection strings? [duplicate]有没有办法在 SQLAlchemy 连接字符串中指定 Postgres 模式? [复制]
【发布时间】: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


【解决方案1】:

您可以使用 blaze 连接到 SQL Alchemy 中的 postgreSQL 和元数据

from blaze import data
from sqlalchemy import MetaData
ds = data(MetaData('postgresql://localhost/test', schema='my_schema')) 

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

pip install blaze

【讨论】:

    猜你喜欢
    • 2022-08-24
    • 2017-03-20
    • 1970-01-01
    • 2011-10-04
    • 2015-12-31
    • 2011-06-27
    • 1970-01-01
    • 2019-12-21
    相关资源
    最近更新 更多