问题
Using the psycopg2 module to connect to the PostgreSQL database using python. I'm able to execute all of my queries using the below connection method. Now I want to specify a different schema other than the public to execute my SQL statements. Is there any way to specify the schema name in the connection method?
conn = psycopg2.connect(host="localhost",
port="5432",
user="postgres",
password="password",
database="database",
)
I tried to specify schema directly inside the method.
schema="schema2"
But I am getting the following programming error.
ProgrammingError: invalid dsn: invalid connection option "schema"
回答1:
When we were working on ThreadConnectionPool
which is in psycopg2
and creating connection pool, this is how we did it.
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"
)
You see that options
key there in params. That's how we did it.
When you execute a query using the cursor from that connection, it will search across those schemas mentioned in options
i.e., dbo,public
in sequence from left to right.
You may try something like this:
psycopg2.connect(host="localhost",
port="5432",
user="postgres",
password="password",
database="database",
options="-c search_path=dbo,public")
Hope this might help you.
回答2:
If you are using the string form you need to URL escape the options
argument:
postgresql://localhost/airflow?options=-csearch_path%3Ddbo,public
(%3D
= URL encoding of =
)
This helps if you are using SQLAlchemy for example.
来源:https://stackoverflow.com/questions/59298580/how-to-specify-schema-in-psycopg2-connection-method