2015-12-27 17 views
14

Ich möchte Postgres-Datenbank mit Python erstellen.Erstellen Sie eine Postgres-Datenbank mit 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) 

Ich erhalte die folgende Fehlermeldung:

InternalError: CREATE DATABASE cannot run inside a transaction block 

ich psycopg2 bin mit zu verbinden. Ich verstehe nicht, was das Problem ist. Was soll ich tun versuchen, Datenbank (Postgres) verbinden:

psql -postgres -U UserName 

und erstellen Sie dann eine andere Datenbank:

create database test; 

Dies ist, was ich in der Regel tun, und ich möchte, dies automatisieren, indem Python-Skript.

Antwort

27

Verwenden ISOLATION_LEVEL_AUTOCOMMIT, eine psycopg2 Erweiterung:

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

dieser Code erzeugt der Fehler 'psql nicht defined' – Tommy

+0

Vielen Dank, ich den Fehler entfernt. –

7

Wie in der anderen Antwort gezeigt die Verbindung im Autocommit-Modus sein muss. Ein anderer Weg, um es der Einrichtung psycopg2 Verwendung ist durch das autocommit Attribut:

import psycopg2 

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

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