怎么 conn.close()没有成功关闭数据库连接

怎么 conn.close()没有成功关闭数据库连接

# 具体遇到的问题
怎么在Finally 后面 conn.close()没有成功关闭数据库连接,仍然存在conn 连接信息

如果这样,Finally 和 except中的判断语句就没有意义了。问题是出在哪里

麻烦老师来回答一下

# 报错信息的截图
http://img1.sycdn.imooc.com//climg/5faeb01c08f86fa708910581.jpg

# 相关课程内容截图
http://img1.sycdn.imooc.com//climg/5faeaf8708de055c11740528.jpg

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

from mysql_db import pool

class Users(object):
#log in
   def user_log_in(self,user_name,password):
try:
conn=pool.get_connection()
cursor=conn.cursor()
print(dir())
sql='SELECT count(*) ' \
'FROM users ' \
'WHERE user_name=%s AND password=%s '
           cursor.execute(sql,(user_name,password))
count=cursor.fetchone()[0]
return True if count==1 else False

       except Exception as e:
if 'conn' in dir():
conn.close()
print(e)
finally:
if 'conn' in dir():
conn.close()
print('Finally',dir())

print('实例化前',dir())
user=Users()
print(user.user_log_in('admin','123'))
print('False 后的',dir())

在这里输入代码,可通过选择【代码语言】突出显示

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学,你好,

1、close()是关掉了数据库连接,并不是删除conn,因此还是会存在的,但是无法连接数据库的

例:​关闭连接后是不可以再查询数据的

http://img1.sycdn.imooc.com//climg/5fb0dcbb0947375f13900580.jpg

2、当前位置使用了连接池,在连接池中close()会在当前的数据库连接使用完毕之后,将该连接归还到数据库连接池。


好帮手慕燕燕 2020-11-14 12:43:23

同学你好,尝试修改一下SQL语句,数据中的密码是加密的,只传入123是取不到数据的,可参考下面的代码

http://img1.sycdn.imooc.com//climg/5faf5feb09f7c73609160198.jpg

另外,except和finally可结合下面的代码理解一下

1、当程序异常时,执行except代码,如果数据库连接存在,关闭连接并打印错误

2、无论程序是否异常,finally代码都会执行,目的是确保没有异常的情况下,数据库连接也能被关闭

3、当程序发生异常,并且数据库连接已经被关闭,执行到finally代码,if条件不成立,此时不会再关闭连接

http://img1.sycdn.imooc.com//climg/5fae5559094e722d04700282.jpg

从同学的打印结果看,数据库关闭连接是没有问题的

加油,祝学习愉快~~~

  • 提问者 慕瓜5422012 #1
    我的问题 是: finally:
    2020-11-15 14:29:54
  • 提问者 慕瓜5422012 #2
    我的问题 是 finally 后 if 判断通为假才对。因为except那,已出错了,会关掉连接。可是我的测试是。 except关了一次。finally的判断语句还是真,可以再次关闭连接。关闭连接后,再次打印 dir() 发现还有 conn连接的存在,说明我的代码中没有成功关闭连接,是问题在出哪里
    2020-11-15 14:32:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师