Python基于多线程操作数据库相关问题分析
本文实例分析了Python多线程操作数据库相关问题。分享给大家供大家参考,具体如下:
python多线程并发操作数据库,会存在链接数据库超时、数据库连接丢失、数据库操作超时等问题。
解决方法:使用数据库连接池,并且每次操作都从数据库连接池获取数据库操作句柄,操作完关闭连接返回数据库连接池。
*连接数据库需要设置charset='utf8',use_unicode=True,不然会报中文乱码问题
*网上说解决python多线程并发操作数据库问题,连接时使用self.conn.ping(True)(检查并保持长连接),但是我这边亲测无法解决,建议还是使用数据库连接池
python多线程代码:
importthreading
classMyThread(threading.Thread):
def__init__(self,name,count,exec_object):
threading.Thread.__init__(self)
self.name=name
self.count=count
self.exec_object=exec_object
defrun(self):
whileself.count>=0:
count=count-1
self.exec_object.execFunc(count)
thread1=MyThread('MyThread1',3,ExecObject())
thread2=MyThread('MyThread2',5,ExecObject())
thread1.start()
thread2.start()
thread1.join()#join方法执行完thread1的方法才继续主线程
thread2.join()#join方法执行完thread2的方法才继续主线程
#执行顺序并发执行thread1thread2,thread1和thread2执行完成才继续执行主线程
#ExecObject类是自定义数据库操作的业务逻辑类
#
########join方法详解########
thread1=MyThread('MyThread1',3,ExecObject())
thread2=MyThread('MyThread2',5,ExecObject())
thread1.start()
thread1.join()#join方法执行完thread1的方法才继续主线程
thread2.start()
thread2.join()#join方法执行完thread2的方法才继续主线程
#执行顺序先执行thread1,执行完thread1再执行thread2,执行完thread2才继续执行主线程
mysql数据库连接池代码:
importMySQLdb
fromDBUtils.PooledDBimportPooledDB
classMySQL:
host='localhost'
user='root'
port=3306
pasword=''
db='testDB'
charset='utf8'
pool=None
limit_count=3#最低预启动数据库连接数量
def__init__(self):
self.pool=PooledDB(MySQLdb,self.limit_count,host=self.host,user=self.user,passwd=self.pasword,db=self.db,
port=self.port,charset=self.charset,use_unicode=True)
defselect(self,sql):
conn=self.pool.connection()
cursor=conn.cursor()
cursor.execute(sql)
result=cursor.fetchall()
cursor.close()
conn.close()
returnresult
definsert(self,table,sql):
conn=self.pool.connection()
cursor=conn.cursor()
try:
cursor.execute(sql)
conn.commit()
return{'result':True,'id':int(cursor.lastrowid)}
exceptExceptionaserr:
conn.rollback()
return{'result':False,'err':err}
finally:
cursor.close()
conn.close()
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》、《Python+MySQL数据库程序设计入门教程》及《Python常见数据库操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。