程序是怎么保证连接池对象只有一个的
案例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
1 | import mysql.connector.pooling<br><br>__config = {<br> "host" : "localhost" ,<br> "port" : 3306 ,<br> "user" : "root" ,<br> "password" : "123456" ,<br> "database" : "vega" <br>}<br> def get_pool():<br> try :<br> print ( '连接池' )<br> pool = mysql.connector.pooling.MySQLConnectionPool(<br> * * __config,<br> pool_size = 10 <br> )<br> return pool<br> except Exception as e:<br> print (e)<br> |
user_dao.py
1 | from db import mysql_db<br><br> class UserDao:<br> # 验证用户登录<br> def login(self, username, password):<br> try:<br> pool = mysql_db.get_pool()<br> print(id(pool))<br> con = pool.get_connection()<br> print('userdao', con)<br> except Exception as e:<br> print(e)<br> finally:<br> if "con" in dir():<br> # 归还连接<br> con.close()<br> |
news_dao.py
1 | from db import mysql_db<br><br> class NewsDao:<br> # 查询待审批新闻列表<br> def search_unreview_list(self, page):<br> try:<br> pool = mysql_db.get_pool()<br> print(id(pool))<br> con = pool.get_connection()<br> print('newsdao',con)<br> except Exception as e:<br> print(e)<br> finally:<br> if "con" in dir():<br> con.close()<br> |
4、在myqsl_db中创建了连接池pool,在其他文件中导入pool即可。和在a.py文件中定义变量name,在b.py文件中导入name,在输出name时值是一样的
例:
- 参与学习 人
- 提交作业 5238 份
- 解答问题 2433 个
Facebook曾声称“只招全栈工程师”!全栈用人需求猛增,市面人才紧缺。 0基础进击Python全栈开发,诱人薪资在前方!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧