2015-12-27 19 views
14

Tôi muốn tạo cơ sở dữ liệu Postgres bằng Python.Tạo cơ sở dữ liệu Postgres bằng 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) 

Tôi nhận được lỗi sau:

InternalError: CREATE DATABASE cannot run inside a transaction block 

Tôi đang sử dụng psycopg2 để kết nối. Tôi không hiểu vấn đề là gì. Những gì tôi đang cố gắng làm là để kết nối với cơ sở dữ liệu (Postgres):

psql -postgres -U UserName 

Và sau đó tạo ra một cơ sở dữ liệu:

create database test; 

Đây là những gì tôi thường làm và tôi muốn tự động hoá này bằng cách tạo Kịch bản Python.

Trả lời

27

Sử dụng ISOLATION_LEVEL_AUTOCOMMIT, một phần mở rộng 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

mã này tạo ra các lỗi 'psql không defined' – Tommy

+0

Cảm ơn bạn, tôi loại bỏ các lỗi. –

7

Như đã trình bày trong câu trả lời khác kết nối phải ở chế độ autocommit. Một cách khác để cài đặt nó sử dụng psycopg2 là thông qua các thuộc tính autocommit:

import psycopg2 

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

cur = con.cursor() 
cur.execute('CREATE DATABASE {};'.format(self.db_name)) 
Các vấn đề liên quan