1

I'm trying to create a Postgres table using psycopg2 in Python as follows:

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)

Then I construct the object as follows:

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

I am able to manually connect to the database and create the table. However, I'm not able to do so using Python. There are no exceptions or error messages. When I try to list the tables in the database manually, I don't find my newly created table. Any suggestions what could be wrong ?

Iron Fist
11k2 gold badges21 silver badges36 bronze badges
asked Jan 13, 2017 at 18:34
3
  • So what went wrong?, Any error message to post that could help solving your case? :) Commented Jan 13, 2017 at 18:38
  • Eventually there are no exceptions or error messages. When I try to list the tables in the database manually, I don't find my newly created table Commented Jan 13, 2017 at 18:39
  • 2
    You should commit after execute :) Commented Jan 13, 2017 at 18:48

2 Answers 2

2

Seems, you are missing the commit at the end of db_create_table method:

self.conn.commit()
answered Jan 13, 2017 at 18:50
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks it worked. I was following Python's documentation for psycopg2 but it never mentioned so! weird
Can you post the link to it?
1

Iron Fist's answer is absolutely correct, but if you don't want to have commits all over your code, you can also set it on the connection like this:

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()
answered Jan 13, 2017 at 18:55

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.