SQLObject 和 Python 3

Python 2 和 Python 3 之间的变更

由于 Python 3.0 中引入的字符串/字节处理方式的变更,SQLObject 在 Python 3 中的行为发生了一些变更。

BLOBCol

在 Python 3 中,BLOBCol 现在接受并返回字节,而不是像在 Python 2 中那样返回字符串。

StringCol

在 Python 3 中,StringCol 现在接受任意 Unicode 字符串。

UnicodeCol

在 Python 3 代码中,UnicodeCol 的 dbEncoding 参数不起作用。现在由底层数据库层处理,不再通过 SQLObject 暴露。对于编写与 Python 2 兼容的代码的人员,该参数仍然可用。

Python 3 和 MySQL

SQLObject 在 Python 3 上使用 mysqlclient 作为数据库驱动程序进行测试。请注意,MySQL 数据库的默认编码为latin1,这可能会导致通用 Unicode 字符串出现问题。我们建议在使用 MySQL 时将字符集指定为utf8,以避免出现这些问题。

在 Python 3 中使用 SQLObject 和 Python 2 创建的数据库

对于大多数情况,一切应该像以前一样正常工作。唯一的问题应该是 UnicodeCol,因为处理方式已发生变化。

SQLite

Python 3 sqlite 驱动程序期望 Unicode 列使用 utf8 编码。使用 Python 2 上的默认编码创建的列应该可以正常工作,但使用 dbEncoding 参数设置了不同编码创建的列可能会导致问题。

Postgres

Postgres 的行为类似于 sqlite。使用 Python 2 上的默认编码创建的列应该可以正常工作,但使用 dbEncoding 设置了不同编码创建的列可能会导致问题。

MySQL

对于 MySQL,结果取决于 Python 2 数据库是否使用 MySQLdb 的 Unicode 模式。

如果使用 charset 参数为数据库指定了字符集,例如

mysql:///127.0.0.1/test?charset=latin1

如果在使用 Python 3 时指定了相同的字符集,则应该可以正常工作。

如果未指定字符集,则如果将字符集设置为与定义 UnicodeCol 时使用的 dbEncoding 参数匹配,则可能可以正常工作。

Get SQLObject at SourceForge.net. Fast, secure and Free Open Source software downloads