悠闲博客-blog.yxrjt.cn

使用PyMySQL连接池连接多个数据库

更新时间:2025-09-24 11:04点击:47

‌在进行数据库操作时,我们经常需要连接多个数据库来进行数据处理。而PyMySQL是Python中一个常用的操作MySQL数据库的库,可以使用连接池来提高数据处理的效率和性能。本文将介绍如何使用PyMySQL连接池来连接多个数据库,并给出相应的代码示例。


什么是PyMySQL连接池

PyMySQL连接池是一种管理数据库连接的技术,它可以在系统初始化时创建一定数量的数据库连接,然后在需要进行数据库操作时从连接池中获取连接,用完之后再将连接放回连接池,以提高数据库操作的效率。


连接多个数据库

在实际应用中,我们可能需要连接多个数据库来进行数据处理。下面是一个示例代码,演示了如何使用PyMySQL连接池连接多个数据库并进行数据查询。


import pymysql

from DBUtils.PooledDB import PooledDB


# 创建连接池1

pool1 = PooledDB(pymysql, 5, host='localhost', user='user1', password='password1', database='db1')


# 创建连接池2

pool2 = PooledDB(pymysql, 5, host='localhost', user='user2', password='password2', database='db2')


# 从连接池1中获取连接

conn1 = pool1.connection()

cursor1 = conn1.cursor()


# 从连接池2中获取连接

conn2 = pool2.connection()

cursor2 = conn2.cursor()


# 查询数据库1中的数据

cursor1.execute("SELECT * FROM table1")

result1 = cursor1.fetchall()

print(result1)


# 查询数据库2中的数据

cursor2.execute("SELECT * FROM table2")

result2 = cursor2.fetchall()

print(result2)


# 关闭连接

cursor1.close()

conn1.close()

cursor2.close()

conn2.close()


状态图


旅行

journey

    title PyMySQL连接池连接多个数据库示例


    section 初始化连接池1

        [*] --> 创建连接池1

        创建连接池1 --> 连接数据库1

        连接数据库1 --> 查询数据1

        查询数据1 --> 关闭连接1


    section 初始化连接池2

        [*] --> 创建连接池2

        创建连接池2 --> 连接数据库2

        连接数据库2 --> 查询数据2

        查询数据2 --> 关闭连接2


    section 结束

        关闭连接1 --> 结束

        关闭连接2 --> 结束

通过上面的示例代码和状态图、旅行图,我们可以清晰地了解如何使用PyMySQL连接池连接多个数据库并进行数据操作。使用连接池可以提高数据库操作的效率和性能,同时更好地管理数据库连接。


Python数据库连接池实例——PooledDB

不用连接池的MySQL连接方法

import MySQLdb
conn= MySQLdb.connect(host='localhost',user='root',passwd='pwd',db='myDB',port=3306) cur=conn.cursor() SQL="select * from table1" r=cur.execute(SQL) r=cur.fetchall() cur.close() conn.close()

用连接池后的连接方法

import MySQLdb
from DBUtils.PooledDB import PooledDB
pool = PooledDB(MySQLdb,5,host='localhost',user='root',passwd='pwd',db='myDB',port=3306) #5为连接池里的最少连接数

conn = pool.connection() #以后每次需要数据库连接就是用connection()函数获取连接就好了
cur
=conn.cursor() SQL="select * from table1" r=cur.execute(SQL) r=cur.fetchall() cur.close() conn.close()

PooledDB的参数:
1. mincached,最少的空闲连接数,如果空闲连接数小于这个数,pool会创建一个新的连接
2. maxcached,最大的空闲连接数,如果空闲连接数大于这个数,pool会关闭空闲连接
3. maxconnections,最大的连接数,
4. blocking,当连接数达到最大的连接数时,在请求连接的时候,如果这个值是True,
请求连接的程序会一直等待,直到当前连接数小于最大连接数,如果这个值是False,会报错,
5. maxshared 当连接数达到这个数,新请求的连接会分享已经分配出去的连接

在uwsgi中,每个http请求都会分发给一个进程,连接池中配置的连接数都是一个进程为单位的
(即上面的最大连接数,都是在一个进程中的连接数),而如果业务中,
一个http请求中需要的sql连接数不是很多的话(其实大多数都只需要创建一个连接),
配置的连接数配置都不需要太大。
连接池对性能的提升表现在:
1.在程序创建连接的时候,可以从一个空闲的连接中获取,不需要重新初始化连接,提升获取连接的速度
2.关闭连接的时候,把连接放回连接池,而不是真正的关闭,所以可以减少频繁地打开和关闭连接

0

栏目分类

联系方式
  • help@yxrjt.cn
  • lgc@yxrjt.cn
  • admin@yxrjt.cn