MySQL 连接器/C++ 发行说明  / MySQL 连接器/C++ 2.0 中的更改  /  MySQL 连接器/Python 2.0.0 的变化(2014-07-24,Alpha)

MySQL 连接器/Python 2.0.0 的变化(2014-07-24,Alpha)

添加或更改的功能

  • 不兼容的更改: 以前的连接器/Python 系列具有单独的 Python 2 和 Python 3 代码库。对于 Connector/Python 2.0,源代码树已重新组织为具有单一代码库,以便于维护、测试和分发。

    这种重组会导致行为发生不兼容的变化:使用原始游标时,返回值属于该bytearray类型。这是让 Python 2 和 3 返回相同数据所必需的。考虑以下示例:

    import mysql.connector
    
    cnx = mysql.connector.connect(raw=True)
    cursor = cnx.cursor()
    cursor.execute('SELECT 1')
    print(cursor.fetchall())

    在 Connector/Python 1.x 中,输出为:

    • 使用 Python 2:[('1',)]

    • 使用 Python 3:[(b'1',)]

    在 Connector/Python 2.0 中,对于两个 Python 版本,输出都是:[(bytearray(b'1'),)]

    要获得与 Connector/Python 1.x 中相同的值,请执行以下操作:

    • 使用 Python 2:str(bytearray(b'1'))

    • 使用 Python 3:bytes((bytearray(b'1'))

  • 重要更改: 以前,要启用 LOAD DATA LOCAL,客户端必须显式设置 ClientFlag.LOCAL_FILES标志。现在默认启用此标志。要禁用它,可以将 的 allow_local_infile选项 connect()设置为 False

  • 对于生成多个结果集的存储过程,现在可以通过执行CALL语句来执行该过程并处理其结果。执行execute()带有 multi=True参数的using语句,并使用返回的迭代器依次处理每个结果。(错误#73291,错误#19207922)

  • 连接器/Python 现在支持使用两个新选项的选项文件connect()

    • option_files: 要读取的选项文件。该值可以是文件路径名(字符串)或路径名字符串序列。默认情况下,Connector/Python 不读取任何选项文件,因此必须明确给出此参数才能读取选项文件。按照指定的顺序读取文件。

    • option_groups: 如果读取了选项文件,则从选项文件中读取哪些组。该值可以是选项组名称(字符串)或组名称字符串序列。如果未给出此参数,则默认值为 ['client, 'connector_python']读取 [client][connector_python]组。

    有关详细信息,请参阅 连接器/Python 选项文件支持

  • mysql.connector.cursor模块支持四个新的游标类:

    • 游标类将MySQLCursorDict每一行作为字典返回。每个字典对象的键是 MySQL 结果的列名。

      cursor = cnx.cursor(dictionary=True)
    • MySQLCursorBufferedDict游标类类似于,但 在MySQLCursorDict执行查询后获取整个结果集并缓冲行。

      cursor = cnx.cursor(dictionary=True, buffered=True)
    • 游标类将MySQLCursorNamedTuple每一行作为命名元组返回。每一列都可以通过类元组对象的属性访问。

      cursor = cnx.cursor(named_tuple=True)
    • MySQLCursorBufferedNamedTuple游标类类似于,但 在MySQLCursorNamedTuple执行查询后获取整个结果集并缓冲行。

      cursor = cnx.cursor(named_tuple=True, buffered=True)

    有关详细信息,请参阅 子类 cursor.MySQLCursor

  • 打包模块和支持文件已从主存储库和连接器/Python 的源包中删除。它们在 Connector/Python 1.x 系列中仍然可用。

修正错误

  • 的DjangoTimeField00:00:00被错误地转换为, NULL因为 Python 认为该值等于False。(错误#72732,错误#18956789)

  • 从返回许多列的准备好的语句中获取结果可能会产生错误。(错误#72602,错误#18742429)

  • 以前,RuntimeError当 Django 应用程序有一段时间不活动时会引发异常。现在,每次发出数据库请求时,Django 后端都会验证数据库连接是否仍然有效。(错误#72545,错误#18843153)