Python类在__init_中打开MySQLdb。何时关闭?

时间:2014-07-11 11:56:50

标签: python mysql python-multithreading

我正在尝试制作使用线程和MySQL连接的python脚本。该脚本从外部设备中提取数据并将其插入MySQL数据库。我使用MySQLdb作为数据库连接器,因为服务器上的脚本将没有其他方法通过python连接到mysql。 真正的问题是何时打开和关闭线程中的MySQL连接。 我现在正在做的是在run函数中打开连接,但是如果我有静态方法,例如getValues,我应该打开与MySQL的新连接。我认为在类的__init__部分打开连接,以便我可以在每个函数中使用self.connection这里出现了关闭连接光标的问题,直到现在我才使用? 以下是我正在做的事情的示例代码正确现在

class readMe(threading.Thread):

def __init__ (self,cm_config,db_config):
    threading.Thread.__init__(self)
    self.exit_event=threading.Event()
    if not db_config:
        db_config={'db_host':'localhost',
                   'db_user':'root',
                   'db_pwrd':'pwrd',
                   'db_name':'test'}
    self.db_config=db_config
def run(self):
    try:
        vruzkaUstroistva = MySQLdb.connect(self.db_config['db_host'], self.db_config['db_user'], self.db_config['db_pwrd'], self.db_config['db_name']);
        vurzkaUstroistva_cur=Cursor(vruzkaUstroistva)
        vurzkaUstroistva_cur.execute("SET NAMES UTF8");
        .....
        vurzkaUstroistva_cur.execute(query1)
        vruzkaUstroistva.commit()
    except ConnectionException, e:
        query1 = (" INSERT INTO `Danni`")
        vurzkaUstroistva_cur.execute(query1)
        vruzkaUstroistva.commit()
    except MySQLdb.Error, e:
        print "Error %d: %s" % (e.args[0],e.args[1])
        pass
    finally:
        if vruzkaUstroistva:
        vurzkaUstroistva_cur.close()
        vruzkaUstroistva.close()

以下是我尝试的例子:

  class readMe(threading.Thread):

    def __init__ (self,cm_config,db_config):
        threading.Thread.__init__(self)
        self.exit_event=threading.Event()
        if not db_config:
            db_config={'db_host':'localhost',
                       'db_user':'root',
                       'db_pwrd':'pwrd',
                       'db_name':'test'}
        self.db_config=db_config
        self.vruzka = MySQLdb.connect(self.db_config['db_host'], self.db_config['db_user'], self.db_config['db_pwrd'], self.db_config['db_name']);
    def run(self):
        try:
            vruzkaUstroistva = self.vruzka
            vurzkaUstroistva_cur=Cursor(vruzkaUstroistva)
            vurzkaUstroistva_cur.execute("SET NAMES UTF8");
            .....
            vurzkaUstroistva_cur.execute(query1)
            vruzkaUstroistva.commit()
        except ConnectionException, e:
            query1 = (" INSERT INTO `Danni`")
            vurzkaUstroistva_cur.execute(query1)
            vruzkaUstroistva.commit()
        except MySQLdb.Error, e:
            print "Error %d: %s" % (e.args[0],e.args[1])
            pass
        finally:
            if vurzkaUstroistva_cur:
                vurzkaUstroistva_cur.close()
    def __del__:
        if vruzkaUstroistva:
            vruzkaUstroistva.close()

0 个答案:

没有答案