2015-12-27 29 views
14

Voglio creare il database Postgres usando Python.Creare un database Postgres usando python

con = psql.connect(dbname='postgres', 
     user=self.user_name, host='', 
     password=self.password) 

cur = con.cursor() 
cur.execute("CREATE DATABASE %s ;" % self.db_name) 

Sto ottenendo il seguente errore:

InternalError: CREATE DATABASE cannot run inside a transaction block 

Sto usando psycopg2 per la connessione. Non capisco qual è il problema. Quello che sto cercando di fare è quello di connettersi al database (Postgres):

psql -postgres -U UserName 

e quindi creare un altro database:

create database test; 

Questo è quello che faccio di solito e voglio automatizzare questo con la creazione di Script Python

risposta

27

Uso ISOLATION_LEVEL_AUTOCOMMIT, le estensioni psycopg2:

No transaction is started when command are issued and no commit() or rollback() is required.

import psycopg2 
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT # <-- ADD THIS LINE 

con = psycopg2.connect(dbname='postgres', 
     user=self.user_name, host='', 
     password=self.password) 

con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT) # <-- ADD THIS LINE 

cur = con.cursor() 
cur.execute("CREATE DATABASE %s ;" % self.db_name) 
+0

questo codice genera l'errore 'psql non defined' – Tommy

+0

Grazie, ho rimosso l'errore. –

7

Come mostrato in altra risposta la connessione deve essere in modalità autocommit. Un altro modo di impostazione usando psycopg2 è attraverso l'attributo autocommit:

import psycopg2 

con = psycopg2.connect(...) 
con.autocommit = True 

cur = con.cursor() 
cur.execute('CREATE DATABASE {};'.format(self.db_name))