自定义cursor_class不适用于字典属性 - LoggingCursor

问题描述 投票:0回答:1

我正在使用

mysql-connector-python==9.0.0
并且需要一个自定义光标类。默认情况下,我使用:

cursor = db.cursor(dictionary=True)

这会将数据作为字典而不是元组(这是默认值)返回,因为它是我的应用程序所必需的。问题是当我使用时:

cursor = db.cursor(cursor_class=LoggingCursor, dictionary=True)

忽略

dictionary
属性,数据以元组形式返回。

这是我的

LoggingCursor
课程:

class LoggingCursor(CMySQLCursor):
    def __init__(self, *args, **kwargs):
        print(*args)
        super(LoggingCursor, self).__init__(*args, **kwargs)
        self.executed_statements: list[str] = []

    def execute(self, operation, params=(), multi=False):
        result = super(LoggingCursor, self).execute(operation, params, multi)
        self.executed_statements.append(self.statement)
        return result

    def executemany(self, operation, seq_params):
        result = super(LoggingCursor, self).executemany(operation, seq_params)
        for _ in seq_params:
            self.executed_statements.append(self.statement)
        return result

    @property
    def all_executed_statements(self):
        return self.executed_statements

请注意,我需要使用光标 C 扩展,因为如果我使用

mysql.connector.cursor.MySQLCursor
(这是默认类),我会收到此错误:

mysql.connector.errors.ProgrammingError: Cursor class needs to be a subclass of cursor_cext.CMySQLCursor 

那么,在使用自定义游标类时如何将结果作为字典返回?

python-3.x mysql-connector-python
1个回答
0
投票

mysql_connector
CMySQLCursorDict
课程。您需要使用它才能将结果作为字典返回。

class LoggingCursor(CMySQLCursorDict):
      pass 

cursor = db.cursor(cursor_class=LoggingCursor)

我在这个gist中添加了完整的代码。

© www.soinside.com 2019 - 2024. All rights reserved.