python使用mysql连接池
时间: 2023-10-24 22:19:33 浏览: 103
很高兴能回答您的问题。关于Python使用MySQL连接池,可以使用第三方库PyMySQL提供的连接池功能,也可以使用Python标准库中concurrent.futures提供的线程池和进程池来实现。
具体操作可以参考以下代码示例:
```
import pymysql
from pymysql import cursors
from concurrent.futures import ThreadPoolExecutor, as_completed
# 创建连接池
class ConnectionPool(object):
def __init__(self, size=10):
self.__pool = []
for _ in range(size):
conn = pymysql.connect(host='localhost', user='root', password='password', database='test',
cursorclass=cursors.DictCursor)
self.__pool.append(conn)
# 获取连接
def get_conn(self):
return self.__pool.pop()
# 释放连接
def add_conn(self, conn):
self.__pool.append(conn)
pool = ConnectionPool()
# 使用连接池查询数据
def query(sql):
conn = pool.get_conn()
cursor = conn.cursor()
cursor.execute(sql)
result = cursor.fetchall()
cursor.close()
pool.add_conn(conn)
return result
# 使用线程池并发查询数据
def main():
sqls = ['SELECT * FROM table1;', 'SELECT * FROM table2;', 'SELECT * FROM table3;']
with ThreadPoolExecutor(max_workers=3) as executor:
future_to_sql = {executor.submit(query, sql): sql for sql in sqls}
for future in as_completed(future_to_sql):
sql = future_to_sql[future]
try:
result = future.result()
except Exception as e:
print('%s 报错: %s' % (sql, str(e)))
else:
print('%s 查询结果: %s' % (sql, str(result)))
if __name__ == '__main__':
main()
```
以上是使用连接池和线程池来实现MySQL查询操作的示例代码,希望对您有帮助。如果您有其他问题,欢迎继续提问。
阅读全文