如何在 psycopg2 连接方法中指定 Schema?

Mus*_*afa 4 python postgresql psycopg2

使用 psycopg2 模块通过 python 连接到 PostgreSQL 数据库。我可以使用以下连接方法执行所有查询。现在我想指定一个不同的模式而不是 public 来执行我的 SQL 语句。有没有办法在连接方法中指定模式名称?

conn = psycopg2.connect(host="localhost",
                            port="5432",
                            user="postgres",
                            password="password",
                            database="database",
                            )
Run Code Online (Sandbox Code Playgroud)

我试图直接在方法内部指定架构。 schema="schema2" 但我收到以下编程错误。

ProgrammingError: invalid dsn: invalid connection option "schema"
Run Code Online (Sandbox Code Playgroud)

Suk*_*djf 10

当我们处理ThreadConnectionPoolwhich is inpsycopg2并创建连接池时,我们就是这样做的。

from psycopg2.pool import ThreadedConnectionPool

db_conn = ThreadedConnectionPool(
    minconn=1, maxconn=5,
    user="postgres", password="password", database="dbname", host="localhost", port=5432,
    options="-c search_path=dbo,public"
)
Run Code Online (Sandbox Code Playgroud)

您可以options在 params 中看到该键。我们就是这样做的。

当您使用来自该连接的游标执行查询时,它将从左到右的顺序搜索optionsiedbo,public中提到的那些模式。

你可以尝试这样的事情:

psycopg2.connect(host="localhost", 
                 port="5432", 
                 user="postgres", 
                 password="password", 
                 database="database", 
                 options="-c search_path=dbo,public")
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助你。


Ash*_*lor 8

如果您使用的是字符串形式,则需要对options参数进行 URL 转义:

postgresql://localhost/airflow?options=-csearch_path%3Ddbo,public
Run Code Online (Sandbox Code Playgroud)

( %3D= URL 编码=)

例如,如果您使用 SQLAlchemy,这会有所帮助。