Documentation Home
MySQL 连接器/C++ 发行说明  / MySQL 连接器/C++ 1.1 中的更改  /  MySQL 连接器/Python 1.1.1 的变化(2013-09-10,Alpha)

MySQL 连接器/Python 1.1.1 的变化(2013-09-10,Alpha)

添加或更改的功能

  • 不兼容的更改: 传递给的原始消息errors.Error() 未以可以检索的方式保存。相反,该Error.msg属性使用错误号和 SQLSTATE 值进行格式化。现在只有原始消息保存在Error.msg属性中。可以通过打印或获取错误对象的字符串表示形式来获取格式化值以及错误号和 SQLSTATE 值。例子:

    try:
      conn = mysql.connector.connect(database = "baddb")
    except mysql.connector.Error as e:
      print "Error code:", e.errno        # error number
      print "SQLSTATE value:", e.sqlstate # SQLSTATE value
      print "Error message:", e.msg       # error message
      print "Error:", e                   # errno, sqlstate, msg values
      s = str(e)
      print "Error:", s                   # errno, sqlstate, msg values

    (漏洞 #16933795)

  • 单个单元测试的输出没有显示时间,这使得调试涉及测试执行时间变化的问题变得更加困难。unittest.py现在有一个新 --stats选项可以运行测试并显示每个测试的运行时间。

    也可以将数据保存到 MySQL 服务器。当该 --stats-host选项与其他选项一起给出时,例如--stats-user,结果将保存到一个名为的表中myconnpy_X_Y_Z。该表包含测试用例的名称和结合了 Python 和 MySQL 版本的列;例如,py27my55 或 py33my56。

    例如,要查看 MySQL 5.1 和 5.6 之间的区别,使用 Python 2.7,在使用 Connector/Python 1.1.0 运行测试用例后,使用以下语句:

    SELECT test_case, py27my51, py27my56, (py27my56-py27my51) AS diff51
    FROM myconnpy_1_1_0 WHERE (py27my56-py27my51) > 0.5;

    (漏洞 #17028999)

  • Connector/Python 现在包含一个 mysql.connector.django为 MySQL 提供 Django 后端的模块。此后端支持 MySQL 5.6 中的新功能,例如对时间数据类型的小数秒支持。有关详细信息,请参阅 连接器/Python Django 后端

  • MySQL 连接器/Python 现在支持具有以下特征的简单连接池:

    • 在向请求者提供连接时,池会打开多个连接并处理线程安全。

    • 连接池的大小在池创建时是可配置的。此后无法调整大小。

    • 连接池可以在池创建时命名。如果没有给出名称,则使用连接参数生成一个。

    • 可以从连接池或从中获取的连接中检索连接池名称。

    • 可以有多个连接池。例如,这使应用程序能够支持到不同 MySQL 服务器的连接池。

    • 对于每个连接请求,池提供下一个可用连接。不使用循环或其他调度算法。

    • 可以重新配置池使用的连接参数。这些适用于此后从池中获得的连接。config()不支持 通过调用连接方法重新配置从池中获取的单个连接 。

    可以受益于连接池功能的应用程序包括:

    • 维护与多个 MySQL 服务器的多个连接并要求连接随时可用的中间件。

    • 可以对 MySQL 服务器打开 更多永久”连接的网站。

    连接池实现涉及以下接口元素:

    • 新模块mysql.connector.pooling提供了两个类:MySQLConnectionPool 实例化和管理连接池, PooledMySQLConnection类似于 MySQLConnection但用于连接池中的连接。

    • PoolError对于与池相关的异常,会出现 一个新的异常。PoolError是 的子类Error

    有关详细信息,请参阅 连接器/Python 连接池

修正错误

  • fetchone()or 之后fetchmany(),由 返回的 fetchall()结果缺少一行。(漏洞 #17041412)

  • 以前,在连接关闭后执行语句会引发一个OperationalError不明确的错误。连接器/Python 现在返回客户端错误 2006,MySQL Server has gone away以及一条额外的消息。

    该类Error()已扩展为接受新参数extra_msg. 给出时,它附加在括号之间。例如:([2000] Unknown MySQL Error (Some extra message) 缺陷 #17022399)

  • LOAD DATA LOCAL对于大约 14MB 或更大的文件失败。(漏洞 #17002411)

  • executemany()在没有任何数据的情况下 调用会产生一个ProgrammingError而不是什么都不做。(漏洞 #16660356)

  • InternalError如果有未读的结果,在事务回滚期间会引发 an 。该 MySQLConnection.rollback()方法现在使用未读结果而不是引发错误。(漏洞 #16656621)

  • Python 2.6 和 2.7 在 使用UnicodeDecodeError时 引发了unicode_literals一个数据库名称包含非拉丁 Unicode 字符的问题。(漏洞 #16655208)

  • 当执行语句MySQLCursor.executemany()时将 SQL 函数用作列值时, 该方法引发异常。INSERT(缺陷 #69675,缺陷 #17065366)

  • OperationalError如果在有未读结果时关闭游标对象,则会引发 一个不清楚的问题。连接器/Python 现在提出一个InternalError 指示仍有未读结果。这提供的信息表明,为了避免错误,必须通过读取所有行来使用结果。(漏洞 #67649,漏洞 #17041240)