程序是怎么保证连接池对象只有一个的
案例1:老师原来代码
mysql_db.py 直接获取连接池
user_dao.py 直接import使用
news_dao.py直接import使用
测试类创建两个dao对象并调用对应方法
控制台打印信息:
获取连接池的代码只被执行了一次,两个Dao用的是同一个连接池
案例2:修改后
mysql_db.py改成增加了个函数来获取连接池
user_dao.py通过函数获取连接池
news_dao.py也通过函数获取连接池
测试类创建两个dao对象并调用对应方法
控制台打印信息:
确定函数被调用了两次,但看地址应该是同一个连接池对象
问题:
1、案例1里的两个dao都调用了获取连接池的代码,为什么那段代码只被执行了一次?
2、案例2里获取连接池的函数被调用了两次,为什么不会创建两个不同的连接池?
3、以import引入的对象与函数获取的方式有什么不同?
正在回答 回答被采纳积分+1
同学,你好
1、mysl_db中的pool只创建了一次,内存中已经有了pool变量,从xxx文件中导入pool变量,并不会再次创建,因此连接池是唯一的。
2、impor导入的是已经存在的变量,即从mysql_db文件中导入pool,而函数获取是在调用函数时重新创建pool连接池
3、mysql_db.py
import mysql.connector.pooling
__config = {
"host": "localhost",
"port": 3306,
"user": "root",
"password": "123456",
"database": "vega"
}
def get_pool():
try:
print('连接池')
pool = mysql.connector.pooling.MySQLConnectionPool(
**__config,
pool_size=10
)
return pool
except Exception as e:
print(e)
user_dao.py
from db import mysql_db
class UserDao:
# 验证用户登录
def login(self, username, password):
try:
pool = mysql_db.get_pool()
print(id(pool))
con = pool.get_connection()
print('userdao', con)
except Exception as e:
print(e)
finally:
if "con" in dir():
# 归还连接
con.close()
news_dao.py
from db import mysql_db
class NewsDao:
# 查询待审批新闻列表
def search_unreview_list(self, page):
try:
pool = mysql_db.get_pool()
print(id(pool))
con = pool.get_connection()
print('newsdao',con)
except Exception as e:
print(e)
finally:
if "con" in dir():
con.close()
4、在myqsl_db中创建了连接池pool,在其他文件中导入pool即可。和在a.py文件中定义变量name,在b.py文件中导入name,在输出name时值是一样的
例:
- 参与学习 人
- 提交作业 5211 份
- 解答问题 2433 个
Facebook曾声称“只招全栈工程师”!全栈用人需求猛增,市面人才紧缺。 0基础进击Python全栈开发,诱人薪资在前方!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星