我正在尝试制作使用线程和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()