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