Su postgres, tre database sono normalmente presenti per impostazione predefinita. Se si è in grado di connettersi come superutente (ad esempio, il ruolo postgres
), è possibile connettersi ai database postgres
o template1
. L'impostazione predefinita pg_hba.conf consente solo all'utente unix denominato postgres
di utilizzare il ruolo postgres
, quindi la cosa più semplice è diventare quell'utente. In ogni caso, creare un motore come al solito con un utente che dispone delle autorizzazioni per creare un database:
>>> engine = sqlalchemy.create_engine("postgres://[email protected]/postgres")
Non è possibile utilizzare engine.execute()
però, perché Postgres non consente di creare database all'interno di transazioni, e SQLAlchemy cerca sempre per eseguire query in una transazione. Per aggirare il problema, ottenere il collegamento sottostante dal motore:
>>> conn = engine.connect()
Ma la connessione sarà ancora all'interno di una transazione, in modo da avere per terminare la transazione aperta con un commit
:
>>> conn.execute("commit")
E è quindi possibile procedere alla creazione del database utilizzando il comando PostgreSQL appropriato.
>>> conn.execute("create database test")
>>> conn.close()
Creare un nuovo database o solo tabelle? Non ho incontrato molti ORM che in realtà creano database. –
Ho trovato [questo] (http://www.mail-archive.com/[email protected]/msg05520.html) –
Utile: http://sqlalchemy-utils.readthedocs.org/en/latest/database_helpers .html –