2015-12-27 28 views
14

Chcę utworzyć bazę Postgres za pomocą Pythona.Utwórz bazę danych Postgres za pomocą pythona

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

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

otrzymuję następujący błąd:

InternalError: CREATE DATABASE cannot run inside a transaction block 

używam psycopg2 się połączyć. Nie rozumiem, o co chodzi. Co ja próbuje zrobić, to podłączyć do bazy danych (PostgreSQL):

psql -postgres -U UserName 

a następnie utworzyć innej bazy danych:

create database test; 

To, co zazwyczaj robię i chcę, aby zautomatyzować to poprzez stworzenie Skrypt w języku Python.

Odpowiedz

27

Zastosowanie ISOLATION_LEVEL_AUTOCOMMIT, a rozszerzenia 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

ten kod generuje błąd 'psql nie defined' – Tommy

+0

Dziękuję, usunąłem błąd. –

7

Jak pokazano w drugiej odpowiedzi Połączenie musi być w trybie automatycznego zatwierdzania. Innym sposobem ustawiania go za pomocą psycopg2 jest przez atrybut autocommit:

import psycopg2 

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

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