0
我使用烧瓶瓶,MySQL和先前执行以下操作使用时,不同的类型:mysql.connect()返回声明
db = mysql.connect()
cursor = db.cursor()
#do database stuff
cursor.close()
db.close()
但我想我会做的事情有点清洁而更地道,所以我尝试:
with mysql.connect() as db, db.cursor() as cursor:
#do database stuff
它给了我下面的错误“AttributeError的:‘光标’对象有没有属性‘光标’”
一个小调查后,当我做mysql.connec t()在它自己它正在返回一个连接对象,但当我在一个with语句中执行它...它返回一个游标对象!所以这个工程:
with mysql.connect() as cursor:
#do database stuff
所以这是怎么回事呢?为什么在with语句中返回类型会改变?我查看了Flask-MySQL的源代码,但找不到任何东西...
此外,这仍然会正常工作,以关闭db连接在块结束?
相关版本信息:
- 的Python == 2.7.3
- 烧瓶== 0.10.1
- 烧瓶的MySQL == 1.3
但是,当我在https://github.com/cyberdelia/flask-mysql/blob/master/flaskext/mysql.py检查瓶MySQL的源代码中有no__enter__OR__exit__function班上,只有an__init__功能。 – jcmiller11
@jcmiller正如我所说的,它是'mysql.connect()'的**结果**,它暴露了上下文管理器API。在这种情况下,结果是'MySQLdb.connect'的返回值(请参阅您链接的代码),它是一个'MySQLdb.Connection' ...这是暴露api的类。 – donkopotamus
好的,谢谢@ donkopotamus,帮助我把头围绕在它周围。 – jcmiller11