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程序设计有所帮助。