为什么我的连接对象突然变成了主要的游标对象?

why is my connection object suddenly a cursor object in the main?

PyMySQL==0.9.2 python3.6.4 我稍微简化了我的代码,它应该在许多 sql 数据库上 运行。我目前的挣扎是 pymysql 和 mysql。 主要的: $>猫testje.py

#!/usr/bin/env python
import pymysql as dbdr
from dbconnections import mysql as dbc

with dbc.connect(dbdr) as conn:
    print(conn)

$>cat dbconnections/mysql.py

def connect(db):
    dbc = db.connect(host='127.0.0.1', user='cistats', password='bloemkool',
                      db='mysql', port=int(3306)
                    #  cursorclass=pymysql.cursors.DictCursor
                    )
    print(dbc)
    return dbc

输出: $>./testje.py

<pymysql.connections.Connection object at 0x10a72e5c0>
<pymysql.cursors.Cursor object at 0x10b16cfd0>

说明在connect函数中dbc是一个Connection对象。 为什么它在 main 中神奇地显示为 Cursor 对象? 我怎样才能解决这个问题?在 main 中,我真的很期待一个 Connection 对象。

对于 cx_Oracle、psycopg2 和 pytds 驱动程序,相同的结构工作正常。

正如 Ignacio Vazquez-Abrams 所提到的,原因是在使用 with 时调用了 connect().enter() 。其他驱动程序也是如此,但其他驱动程序只有:

def __enter__(self):
            return self

并且 pymysql 有:

def __enter__(self):
    """Context manager that returns a Cursor"""
    return self.cursor()

所以我将我的代码简单地更改为:conn = dbc.connect(...) 现在它适用于我目前使用的所有驱动程序。