TODO¶
修复 pyodbc 中的 unicode 问题。
解决 MSSQL 中的超时问题。
PyPy。
使用 https://pypi.ac.cn/project/psycopg2cffi/ 在 PyPy 下运行 SQLObject。
适用于 Linux 和 w32 的 PyODBC 和 PyPyODBC:SQLite (libsqliteodbc)。
Jython。
引用表/列名,这些名称是保留关键字(order => “order”,values => values 适用于 MySQL)。
RelatedJoin.hasOther(otherObject[.id])
createParamsPre/Post
class MyTable(SQLObject): class sqlmeta: createParamsPre = 'TEMPORARY IF NOT EXISTS' createParamsPre = {temporary: True, ifNotExists: True, 'postgres': 'LOCAL'} createParamsPost = 'ENGINE InnoDB' createParamsPost = {'mysql': 'ENGINE InnoDB', 'postgres': 'WITH OIDS'}
SQLObject.fastInsert().
IntervalCol
TimedeltaCol
缓存连接结果。
将测试 isinstance(obj, (tuple, list)) 反转为 not isinstance(obj, basestr) 以允许任何可迭代对象。
始终使用 .lazyIter().
优化 Iteration.next() - 使用 cursor.fetchmany().
使用生成器代替循环 (fetchall => fetchone)。
在 sqlmeta.getColumns() 中缓存列;在添加/删除列/连接时重置缓存。
使 ConnectionHub 成为上下文管理器,而不是 .doInTransaction()。
使 version_info 成为 namedtuple。
表达式列 - 在 SELECT 中,但不在 INSERT/UPDATE 中。类似于此
class MyClass(SQLObject): function1 = ExpressionCol(func.my_function(MyClass.q.col1)) function2 = ExpressionCol('sum(col2)')
异常层次结构。SQLObject 应将异常从低级驱动程序转换为一组一致的高级异常。
Memcache。
重构
DBConnection
以使用参数化查询,而不是生成查询字符串。PREPARE/EXECUTE。
保护所有 .encode(),捕获 UnicodeEncode 异常并重新引发 Invalid。
更多类型的连接,以及更强大的连接结果(更接近 select 的工作方式)。
更好的连接 - 基于 ForeignKey/MultipleJoin/RelatedJoin 在 .select() 中自动连接。
弃用,然后删除 connectionForOldURI。
从 setuptools 切换到 distribute。
支持所有后端的 PyODBC 驱动程序。
dbms 是针对 IBM DB2、Firebird、MSSQL Server、MySQL、Oracle、PostgreSQL、SQLite 和 ODBC 的 DB API 驱动程序的 DB API 包装器。
dict API:使用 getitem 接口进行列访问,而不是 getattr;将 getattr 保留仅供内部属性使用;这有助于避免与内部属性发生冲突。
或将列值访问移动到单独的命名空间,例如 .c:row.c.column。
更多文档。
RSS 2.0 和 Atom 新闻源。
使用 DBUtils,尤其是 SolidConnection。
_fromDatabase
目前不支持不符合常规命名方案的 ID。它应该这样做。您仍然可以使用_idName
和_fromDatabase
。- 支持更多数据库。Oracle 方面已经引起了兴趣,并且取得了一些进展。IWBN 拥有 Informix 和 DB2 驱动程序。
- 更好的事务支持 - 目前您可以对数据库使用事务,但对象没有事务感知,因此无法回滚非数据库持久性。
- 乐观锁和其他处理并发性的技术。
- SQLObject 性能分析以识别瓶颈。
- 使用 FormEncode 验证和表单生成包增加钩子,以便可以更直接、更轻松地发布 SQLObject 类(读取:架构)进行编辑。(第一步:将架构生成方法放入 sqlmeta 类中)
- 将 SQLObject.create*、.create*SQL 方法与 DBPI.create* 方法合并。
- 使 SQLObject 基于 Unicode,而不仅仅是 Unicode 感知。所有内部处理都应使用 Unicode 字符串,对于非 Unicode 数据库 API 驱动程序,应进行与 ASCII 字符串之间的转换。
- 允许覆盖 ConsoleWriter/LogWriter 类和 makeDebugWriter 函数。
- 类型注释和 mypy 测试。