2017-01-13 2 views
1

Я пытаюсь создать таблицу Postgres, используя psycopg2 в Python следующим образом:Невозможно выполнить Postgres запросов в Python

import psycopg2 

class DbOperations (object): 

def __init__(self): 

    self.dummy = None 
    self.conn = None 
    self.cur = None 
    self.query = None 
    self.db_name = "alarm_log" 
    self.table_name = "alarms" 
    self.user = "cayman" 
    self.password = "admin" 
    self.host = "127.0.0.1" 

def db_connect(self): 

    self.conn = psycopg2.connect(dbname=self.db_name, user=self.user, password=self.password, host=self.host) 
    self.cur = self.conn.cursor() 

def db_disconnect(self): 

    self.conn.close() 

def db_create_table(self): 

    self.query =""" 
       CREATE TABLE COMPANY(
      ID INT PRIMARY KEY  NOT NULL, 
      NAME   TEXT NOT NULL, 
      AGE   INT  NOT NULL, 
      ADDRESS  CHAR(50), 
      SALARY   REAL 
     ); 
    """ 
    print (self.query) 
    self.cur.execute(self.query) 

Тогда я построить объект следующим образом:

db_app = DbOperations() 
db_app.db_connect() 
db_app.db_create_table() 

Я возможность вручную подключаться к базе данных и создавать таблицу. Однако я не могу это сделать с помощью Python. Нет исключений или сообщений об ошибках. Когда я пытаюсь перечислить таблицы в базе данных вручную, я не нахожу свою новую созданную таблицу. Любые предложения, что может быть неправильным?

+0

Так что пошло не так ?, Любое сообщение об ошибке, которое могло бы помочь в решении вашего дела? :) –

+0

В конце концов нет никаких исключений или сообщений об ошибках. Когда я пытаюсь перечислить таблицы в базе данных вручную, я не нахожу свою новую созданную таблицу –

+2

. Вы должны зафиксировать после выполнения :) –

ответ

2

Кажется, вам не хватает commit в конце db_create_table метода:

self.conn.commit() 
+0

Спасибо, сработало. Я следовал документации Python для psycopg2, но он никогда не упоминал об этом! weird –

+0

Можете ли вы разместить ссылку на него? –

1
ответ

Iron Fist является абсолютно правильным, но если вы не хотите иметь совершает весь код, вы можете также установите его на соединение следующим образом:

def db_connect(self): 
    self.conn = psycopg2.connect(dbname=self.db_name, user=self.user, password=self.password, host=self.host) 
    self.conn.autocommit = True 
    self.cur = self.conn.cursor() 
Смежные вопросы