我正在尝试将DictCursorwith块一起使用。我认为通过使用:

with MySQLdb.connect(...) as c:


c将是一个连接对象,因为这是connect()返回的内容。但是可惜,事实并非如此!突然,c是一个光标!虽然这通常很方便,但我真的很喜欢使用DictCursor-这根本不是那样设计的吗?将DictCursor封闭为“作用域对象”会导致错误(未定义__exit__

最佳答案

根据此处line 254 of connections.py中MySQLdb中Connection的定义,Connection.cursor()将返回Connection.cursorclass的实例:

def cursor(self, cursorclass=None):
    """
    Create a cursor on which queries may be performed. The
    optional cursorclass parameter is used to create the
    Cursor. By default, self.cursorclass=cursors.Cursor is
    used.
    """
    return (cursorclass or self.cursorclass)(self)


因此,我想如果您使用参数“ cursorclass”初始化连接,并将其设置为MySQLdb.cursors.DictCursor,例如:

dbconn = MySQLdb.connect(cursorclass=MySQLdb.cursors.DictCursor)


当谈到

def __enter__(self):
    if self.get_autocommit():
        self.query("BEGIN")
    return self.cursor()


它将返回一个dict游标。

关于python - Python MySQLdb“具有”语法和DictCursor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14880330/

10-09 17:18