В postgres по умолчанию обычно присутствуют три базы данных. Если вы можете подключиться как суперпользователь (например, с postgres
ролью), вы можете подключиться к базам данных postgres
или template1
. По умолчанию pg_hba.conf разрешает postgres
использовать postgres
роль только указанному пользователю unix , поэтому проще всего просто стать этим пользователем. В любом случае создайте движок как обычно с пользователем, у которого есть разрешения на создание базы данных:
>>> engine = sqlalchemy.create_engine("postgres://postgres@/postgres")
Однако вы не можете использовать engine.execute()
, потому что postgres не позволяет создавать базы данных внутри транзакций, а sqlalchemy всегда пытается запускать запросы в транзакции. Чтобы обойти это, получите базовое соединение от движка:
>>> conn = engine.connect()
Но соединение по-прежнему будет внутри транзакции, поэтому вы должны завершить открытую транзакцию с помощью commit
:
>>> conn.execute("commit")
Затем вы можете приступить к созданию базы данных, используя для этого соответствующую команду PostgreSQL.
>>> conn.execute("create database test")
>>> conn.close()