2015-12-27 4 views
14

का उपयोग कर पोस्टग्रेर्स डेटाबेस बनाएं I Python का उपयोग कर पोस्टग्रेज़ डेटाबेस बनाना चाहते हैं।पायथन

InternalError: CREATE DATABASE cannot run inside a transaction block 

मैं psycopg2 उपयोग कर रहा हूँ कनेक्ट करने के लिए:

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

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

मैं निम्न त्रुटि हो रही है। मुझे समझ में नहीं आता कि समस्या क्या है। मुझे क्या करना कोशिश कर रहा हूँ डेटाबेस से कनेक्ट करने के लिए है (Postgres):

psql -postgres -U UserName 

और फिर एक और डेटाबेस बनाने:

create database test; 

यह वही है मैं आमतौर पर करते हैं और मैं बनाने के द्वारा इस स्वचालित करना चाहते हैं पायथन लिपि

उत्तर

27

उपयोग ISOLATION_LEVEL_AUTOCOMMIT, एक 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

इस कोड उत्पन्न त्रुटि 'psql defined' नहीं – Tommy

+0

धन्यवाद, मैं त्रुटि हटा दिया। –

7

के रूप में अन्य जवाब कनेक्शन autocommit मोड में होना चाहिए में दिखाया गया है। psycopg2 का उपयोग कर इसे स्थापित करने का एक और तरीका है autocommit विशेषता के माध्यम से है:

import psycopg2 

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

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