I’m using Peewee as ORM and connect to a Postgres database (psycopg2) using the Playhouse extension db_url.connect. My URL is a vanilla postgresql://username:pass@host:port/dbname?options=...
so not using pooling or anything advanced at the moment.
Some times when I call connect
it hangs for a long time and doesn’t come back. So I appended to my database URL the parameter &connect_timeout=3
meaning to try for at most 3 seconds and fail-fast with a timeout rather than hanging forever. However, I am not sure whether this argument is supported by Peewee/Playhouse/Psycopg2 … can anyone confirm?
Furthermore, where can I find all the URL parameters supported by Peewee/Playhouse/Psycopg2?
Advertisement
Answer
The psycopg2 doc links in turn to the libpq list of supported parameters:
https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS
connect_timeout
is supported by both peewee and psycopg2:
>>> from playhouse.db_url import * >>> db = connect('postgresql://../peewee_test?connect_timeout=3') >>> conn = db.connection() >>> conn.get_dsn_parameters() {'user': 'postgres', 'passfile': '...', 'channel_binding': 'prefer', 'connect_timeout': '3', # Our connect timeout 'dbname': 'peewee_test', 'host': 'localhost', 'port': '5432', ...}
Peewee passes the parameters, including arbitrary ones like connect_timeout
, back to the constructor of the DB-API Connection class.