在同一类的几个方法之间共享单个 POSTGRESQL 连接



我有这堵砖墙,我正在努力克服。但是,我正在采用此路线(单连接共享),因为当我必须访问具有与另一种方法不同的连接对象的特定表时,以前的方法(多连接)失败了。所以基本上,使用单例连接方法,请参阅下面的示例代码;

import sys, psycopg2

class myclass():
   def __inti__(self):
      pass
# Declaring DB connection
def dbconn(self):
    try:
        connect_string = psycopg2.connect(host='localhost', database='',    user='',password='')
        self.con = connect_string.cursor()
    except:
        print('Connection Error')
    # return dbconn
    print(self.con, 'this is at dbconn method level')
    return self.con

def registration(self):
    """ Detail of our Contacts is being collected"""
    print('Enter 1 or 2 to update Network Provider)
    update_data = int(input('Enter your 1 or 2 :'))
    if update_data == 1:
        network_name = input('Enter name of the Network Provider : ')
        # Calling db_conn method in order to established connection to DB SERVER
        try:
            local_con = myclass().dbconn()
            print(local_con, 'this is at registration method level')
        except:
            if local_con:
                local_con.rollback()
            print('Error  Connection')
        # Sending the data to the database for permanent storage
        local_con.execute(
            "INSERT INTO network(network_name)VALUES(%s)", (network_name,))
        local_con.commit()
        print('Data Save properly')

上面的代码从我的控制台产生了此输出,

You can update Network Provider, API Setting and Price here
Enter 1 or 2 to update Network Provider
Enter your 1 or 2 :1
Enter name of the Network Provider : starcom Nigeria
<cursor object at 0x0000000002FD7EA0; closed: 0> this is at dbconn method level
<cursor object at 0x0000000002FD7EA0; closed: 0> this is at registration method level
Traceback (most recent call last):
File "/myswitch.py", line 258, in <module>
new_provider.registration()
File "/myswitch.py", line 53, in registration
local_con.commit()
AttributeError: 'psycopg2.extensions.cursor' object has no attribute   'commit'

从上面的输出中,我知道我可以在同一类的另一个方法 registration() 中从 dbconn() 方法访问 (self.con),但是,我在 registration() 下的局部变量上期望的 commit() 属性失败了,代码如下 属性错误:"psycopg2.extensions.cursor"对象没有属性"commit"

因此,事务无法保存到数据库。希望我能领导如何解决这个问题。提前致谢

您已经分配了"self.con = connect_string.cursor()",因此local_con游标?提交需要来自 psycopg2.connect 类。

所以在你的情况下,它需要是connect_string.commit()。

最新更新