En postgres, normalmente hay tres bases de datos presentes de forma predeterminada. Si puede conectarse como superusuario (por ejemplo, el postgres
rol), puede conectarse a las bases de datos postgres
o template1
. El pg_hba.conf predeterminado permite que solo el usuario de Unix nombrado postgres
use el postgres
rol, por lo que lo más simple es convertirse en ese usuario. En cualquier caso, cree un motor como de costumbre con un usuario que tenga los permisos para crear una base de datos:
>>> engine = sqlalchemy.create_engine("postgres://postgres@/postgres")
engine.execute()
Sin embargo, no puede usarlo , porque postgres no le permite crear bases de datos dentro de las transacciones y sqlalchemy siempre intenta ejecutar consultas en una transacción. Para evitar esto, obtenga la conexión subyacente del motor:
>>> conn = engine.connect()
Pero la conexión seguirá estando dentro de una transacción, por lo que debe finalizar la transacción abierta con commit
:
>>> conn.execute("commit")
Y luego puede proceder a crear la base de datos utilizando el comando PostgreSQL adecuado para ello.
>>> conn.execute("create database test")
>>> conn.close()