0.1 版本更新日志

0.1.7

发布日期: 2006年5月5日 星期五
  • [no_tags]

    修复了拓扑排序算法的一些问题

  • [no_tags]

    为 Postgres 添加了 DISTINCT ON 支持 (只需提供 distinct=[col1,col2..])

  • [no_tags]

    为 SQL 表达式添加了 __mod__ (% 运算符)

  • [no_tags]

    “order_by” 映射器属性从继承的映射器继承

  • [no_tags]

    修复了映射器执行 UPDATES/DELETE 时使用的列类型问题

  • [no_tags]

    当 convert_unicode=True 时,反射失败的问题已修复

  • [no_tags]

    类型 类型 类型!仍然无法工作...不得不再次使用 TypeDecorator :(

  • [no_tags]

    MySQL binary 类型将数组输出转换为 buffer,修复了 PickleType

  • [no_tags]

    彻底修复了 attributes.py 中的内存泄漏问题

  • [no_tags]

    单元测试根据每个测试支持的数据库进行限定

  • [no_tags]

    修复了列默认值会覆盖插入对象的 VALUES 子句的错误

  • [no_tags]

    修复了带有模式名称的表定义会强制引擎连接的错误

  • [no_tags]

    修复了括号在 INSERT/UPDATE 中的子查询中无法正确工作的问题

  • [no_tags]

    HistoryArraySet 添加了 extend() 方法

  • [no_tags]

    修复了除 = 之外的其他比较运算符的延迟加载支持

  • [no_tags]

    修复了连接条件中的两个比较都指向同一列的延迟加载问题

  • [no_tags]

    为映射器添加了 “construct_new” 标志,将使用 __new__ 而不是 __init__ 来创建实例 (0.2 中的标准)

  • [no_tags]

    将 selectresults.py 添加到 SVN,上次遗漏了

  • [no_tags]

    调整以允许通过关联表从表自身到自身的 多对多 关系

  • [no_tags]

    对多态示例使用的 “translate_row” 函数进行了小幅修复

  • [no_tags]

    create_engine 使用 cgi.parse_qsl 读取查询字符串 (在 0.2 中已弃用)

  • [no_tags]

    调整了 CAST 运算符

  • [no_tags]

    修复了函数名称 LOCAL_TIME/LOCAL_TIMESTAMP -> LOCALTIME/LOCALTIMESTAMP

  • [no_tags]

    修复了编译中 ORDER BY/HAVING 的顺序

0.1.6

发布日期: 2006年4月12日 星期三
  • [no_tags]

    感谢 Rick Morrison, Runar Petursson 添加了对 MS-SQL 的支持

  • [no_tags]

    来自 J. Ellis 的最新 SQLSoup

  • [no_tags]

    ActiveMapper 初步支持继承 (Jeff Watkins)

  • [no_tags]

    添加了一个 “mods” 系统,该系统允许插入式模块修改/增强核心功能,使用函数 “install_mods(*modnames)”。

  • [no_tags]

    添加了第一个 “mod”,SelectResults,它修改映射器选择以返回将范围转换为 LIMIT/OFFSET 查询的生成器 (Jonas Borgstr?)

  • [no_tags]

    将 Mapper 的查询功能分解为一个单独的 Query 对象,该对象以会话为中心。这提高了 mapper.using(session) 的性能,并使其他事情成为可能。

  • [no_tags]

    重构了 objectstore/Session,现在保存对象的官方方法是通过 flush() 方法。Session 的 begin/commit 功能被分解为 LegacySession,在 0.2 系列之前,它仍然被确立为默认行为。

  • [no_tags]

    类型系统在查询编译时绑定到引擎,而不是在模式构建时。这简化了类型系统和 ProxyEngine。

  • [no_tags]

    为映射器添加了 'version_id' 关键字参数。此关键字应引用类型为 Integer 的 Column 对象,最好是非空的,它将用于映射表以跟踪版本号。此数字在每次保存操作时递增,并在 UPDATE/DELETE 条件中指定,以便将其计入返回的行数,如果收到的值不是预期的计数,则会导致 ConcurrencyError。

  • [no_tags]

    为映射器添加了 'entity_name' 关键字参数。现在,映射器通过类对象以及可选的 entity_name 参数(默认为 None 的字符串)与类关联。可以为一个类创建任意数量的主映射器,并以实体名称限定。这些类的实例将通过其实体名称限定的映射器发出所有加载和保存操作,并在身份映射中为其他等效对象维护单独的身份。

  • [no_tags]

    彻底修改了属性系统。代码已澄清,并且还修复了以支持对象属性的正确多态行为。

  • [no_tags]

    为 Select 对象添加了 “for_update” 标志

  • [no_tags]

    对反向引用进行了一些修复

  • [no_tags]

    修复了 postgres1 DateTime 类型

  • [no_tags]

    文档页面主要切换到 Markdown 语法

0.1.5

发布日期: 2006年3月27日 星期一
  • [no_tags]

    为 SQLEngine 添加了 SQLSession 概念。此对象跟踪从连接池检索连接以及正在进行的事务。向 SQLEngine 添加了 push_session() 和 pop_session() 方法,它们将新的 SQLSession 推入/弹出到引擎上,允许对前一个连接中“嵌套”的第二个连接进行操作,从而允许嵌套事务。稍后肯定会出现关于 SQLSession 的其他技巧。

  • [no_tags]

    为 objectstore.Session 添加了 nest_on 参数。这是一个或多个 SQLEngine 的列表,每次此 Session 成为活动会话时(通过 objectstore.push_session() 或等效方法),将调用 push_session()/pop_session()。这允许工作单元 Session 利用嵌套事务功能,而无需显式调用引擎上的 push_session/pop_session。

  • [no_tags]

    将 objectstore/unitofwork 分解开来,以将 “Session 作用域” 与 “uow 提交重任” 分开

  • [no_tags]

    为 MapperExtension 添加了 populate_instance() 方法。允许扩展修改对象属性的填充。此方法可以调用另一个映射器上的 populate_instance() 方法,以将属性填充从一个映射器代理到另一个映射器;还内置了一些行转换逻辑来帮助实现这一点。

  • [no_tags]

    修复了 Oracle8 兼容性 “use_ansi” 标志,该标志将 JOIN 转换为与 = 和 (+) 运算符的比较,并通过了基本单元测试

  • [no_tags]

    调整了对 Oracle LIMIT/OFFSET 的支持

  • [no_tags]

    Oracle 反射使用 ALL_** 视图而不是 USER_** 视图来获取要反射的更多内容列表

  • [no_tags]

    修复了 Oracle 外键反射

    参考: #105

  • [no_tags]

    objectstore.commit(obj1, obj2,…) 添加了一个额外的步骤,即使它不是全局提交,也要在属性上查找私有关系并删除子对象

  • [no_tags]

    对使用继承的映射器进行了大量修复,加强了在映射器上建立关系的概念,使其指向该映射器的 “本地” 表,而不是它继承的表。允许更复杂的组合模式与延迟/急切加载一起工作。

  • [no_tags]

    添加了对映射器从基于同一表的其他映射器继承的支持,只需指定与父/子映射器相同的表即可。

  • [no_tags]

    对属性系统在实例化和填充新对象方面进行了一些小的速度改进。

  • [no_tags]

    修复了 MySQL 二进制单元测试

  • [no_tags]

    INSERT 可以接收子句元素作为 VALUES 参数,而不仅仅是字面值

  • [no_tags]

    支持调用多标记函数,例如 schema.mypkg.func()

  • [no_tags]

    将 J. Ellis 的 SQLSoup 模块添加到 extensions 包

  • [no_tags]

    添加了 “多态” 示例,说明了从一个映射器加载多种对象类型的方法,其中第二个示例使用了新的 populate_instance() 方法。对映射器、UNION 构造进行了小的改进,以帮助示例进行。

  • [no_tags]

    改进/修复了 session.refresh()/session.expire() (之前可能被称为 “invalidate”..)

  • [no_tags]

    添加了 session.expunge(),它完全从当前会话中删除对象

  • [no_tags]

    为 engine.transaction(func) 添加了 *args, **kwargs 传递,从而可以更轻松地创建事务装饰器函数

  • [no_tags]

    为 ResultProxy 添加了迭代器接口: “for row in result:…”

  • [no_tags]

    为 tx = session.begin(); tx.rollback(); tx.begin() 添加了断言,即 rollback() 后不能使用它

  • [no_tags]

    为 SQLite 添加了绑定参数修复的日期转换,使日期可以与 pysqlite1 一起使用

  • [no_tags]

    改进了子查询以更智能地构造其 FROM 子句

    参考: #116

  • [no_tags]

    为 types 添加了 PickleType。

  • [no_tags]

    修复了与绑定参数相关的列标签的两个错误:绑定参数键名现在在所有相关情况下都从列 “label” 生成,以利用超长名称长度规则,并添加了针对与名为 “tablename_colname” 的列的特殊冲突的检查

  • [no_tags]

    彻底修改了工作单元文档和其他文档部分。

  • [no_tags]

    修复了属性错误,其中如果对象已提交,则其延迟加载的列表会在未加载的情况下被清除

  • [no_tags]

    为引擎、连接池添加了 unique_connection() 方法,以返回不属于线程本地上下文或任何当前事务的连接

  • [no_tags]

    为池化连接添加了 invalidate() 函数。将从池中删除连接。仍然需要为引擎自动重新连接到陈旧的数据库进行工作。

  • [no_tags]

    为列元素添加了 distinct() 函数,以便您可以执行 func.count(mycol.distinct())

  • [no_tags]

    为 Mapper 添加了 “always_refresh” 标志,创建一个映射器,该映射器将始终刷新它从数据库获取/选择的对象的属性,覆盖所做的任何更改。

0.1.4

发布日期: 2006年3月13日 星期一
  • [no_tags]

    create_engine() 现在使用通用参数;host/hostname、db/dbname/database、password/passwd 等,用于所有引擎连接。使引擎 URI 更加 “通用”

  • [no_tags]

    添加了对嵌入到列子句中的 SELECT 语句的支持,使用标志 “scalar=True”

  • [no_tags]

    当与继承的映射器结合使用时,再次彻底修改了 EagerLoading;改进了急切加载正确计算其别名查询,并且针对具有继承映射器的映射器设置的关系将针对特定于映射器本身的表(即,而不是任何继承的/在继承链中更靠下的表)创建连接,这可以通过使用自定义主/次连接来覆盖。

  • [no_tags]

    将 J.Ellis 补丁添加到 mapper.py,以便当查询返回多个对象行时 selectone() 抛出异常,selectfirst() 不抛出异常。还添加了 selectfirst_by (与 get_by 同义) 和 selectone_by

  • [no_tags]

    为 Column 添加了 onupdate 参数,将在更新语句上执行 SQL/python。还为所有 DefaultGenerator 子类添加了 “for_update=True”

  • [no_tags]

    添加了 Andrija Zaric 贡献的 Oracle 表反射支持;关于复合主键/字典选择,仍有一些错误需要解决

  • [no_tags]

    签入了一个初始 Firebird 模块,等待测试。

  • [no_tags]

    添加了 sql.ClauseParameters 字典对象作为 compiled.get_params() 的结果,对绑定参数进行后期类型处理,以便更轻松地访问原始值

  • [no_tags]

    更多关于索引、列默认值、连接池、引擎构建的文档

  • [no_tags]

    彻底修改了类型系统的构造。使用更简单的继承模式,以便可以轻松地对任何通用类型进行子类化,而无需 TypeDecorator。

  • [no_tags]

    为 SQLEngine 添加了 “convert_unicode=False” 参数,将导致所有 String 类型执行 unicode 编码/解码 (使 Strings 表现得像 Unicodes)

  • [no_tags]

    为引擎添加了 ‘encoding=”utf8”’ 参数。给定的编码将用于 Unicode 类型以及 convert_unicode=True 时 String 类型中的所有编码/解码调用。

  • [no_tags]

    改进了对 UNION 进行映射的支持,添加了 polymorph.py 示例来说明对 UNION 进行多类映射

  • [no_tags]

    修复了 SQLite LIMIT/OFFSET 语法

  • [no_tags]

    修复了 Oracle LIMIT 语法

  • [no_tags]

    添加了 backref() 函数,允许反向引用具有将传递给反向引用的关键字参数。

  • [no_tags]

    Sequences 和 ColumnDefault 对象可以独立执行 execute()/scalar()

  • [no_tags]

    SQL 函数 (例如 func.foo()) 可以独立执行 execute()/scalar()

  • [no_tags]

    修复了 SQL 函数,以便 ANSI 标准函数(例如 current_timestamp 等)不指定括号。所有其他函数都指定括号。

  • [no_tags]

    为 SmartProperty 添加了 settattr_clean 和 append_clean,它们设置属性而不会触发 “dirty” 事件或任何历史记录。用法示例: myclass.prop1.setattr_clean(myobject, ‘hi’)

  • [no_tags]

    改进了映射器使用列默认值的支持;映射器将从语句的执行绑定参数(预转换)中提取预执行的默认值,以将其填充到已保存对象的属性中;如果任何 PassiveDefaults 已触发,则将改为从数据库后获取行以填充对象。

  • [no_tags]

    为 objectstore 添加了 ‘get_session().invalidate(*obj)’ 方法,实例将在下次属性访问时自行 refresh()。

  • [no_tags]

    改进了 SQL 函数调用,包括一个 “engine” 关键字参数,以便可以独立 execute() 或 scalar() 调用它们,还为 SQLEngine 添加了 func 访问器

  • [no_tags]

    修复了 MySQL4 自定义表引擎,即 TYPE 而不是 ENGINE

  • [no_tags]

    稍微增强了日志记录,包括时间戳和一个在某种程度上可配置的格式化系统,以代替完整的日志记录系统

  • [no_tags]

    改进了来自 TG 团队的 ActiveMapper 类,包括多对多关系

  • [no_tags]

    为 mysql 添加了 Double 和 TinyInt 支持

0.1.3

发布日期: 2006年3月2日 星期四
  • [no_tags]

    完成了 “post_update” 功能,将在插入之前和删除之后添加第二个更新语句,以便在不创建任何依赖项的情况下协调关系;用于持久化两个相互依赖的行时

  • [no_tags]

    完成了 mapper.using(session) 函数,本地化了每个对象的 Session 功能;对象可以声明和操作为任何用户定义的 Session 的本地对象

  • [no_tags]

    修复了 Oracle “row_number over” 子句在多表情况下的问题

  • [no_tags]

    如果映射器的表是连接,例如在继承关系中,mapper.get() 未选择多键对象,此问题已修复。

  • [no_tags]

    彻底修改了 sql/schema 包,以便 sql 包可以完全独立运行,生成 selects、inserts 等,而没有任何引擎依赖项。构建在新的 TableClause/ColumnClause 词法对象之上。Schema 的 Table/Column 对象是它们的 “物理” 子类。简化了 schema/sql 关系、扩展 (例如 proxyengine),并大幅提高了整体性能。删除了困扰 0.1.1 的整个 getattr() 行为。

  • [no_tags]

    将映射器如何在两个对象之间 “同步” 数据重构为一个单独的模块,更好地与附加到映射器的属性一起工作,该映射器与相关表之一具有额外的继承关系,并且用于同步父/子对象的相同方法现在由映射器用于在继承和被继承的映射器之间进行同步。

  • [no_tags]

    使 objectstore “检查超出身份映射” 更具侵略性,将在修改对象属性或删除对象时执行检查

  • [no_tags]

    Index 对象已完全实现,可以独立构造,也可以通过 Columns 上的 “index” 和 “unique” 参数构造。

  • [no_tags]

    为 SQLEngine 添加了 “convert_unicode” 标志,将所有 String/CHAR 类型视为 Unicode 类型,并在绑定参数和结果集端进行原始字节/utf-8 转换。

  • [no_tags]

    postgres 维护一个 ANSI 函数列表,这些函数必须没有括号,以便无参数的函数调用能够一致地工作

  • [no_tags]

    创建表时可以不指定引擎。这将默认使用模块作用域的“默认引擎”,即 ProxyEngine。此引擎可以通过“global_connect”函数连接。

  • [no_tags]

    为 objectstore / Session 添加了 “refresh(*obj)” 方法,用于无条件地从数据库重新加载任何对象集的属性

0.1.2

发布日期:2006 年 2 月 24 日星期五
  • [no_tags]

    修复了 schema 中的一个递归调用,该调用以某种方式运行了 994 次然后正常返回。没有破坏任何东西,但减慢了所有速度。感谢 jpellerin 发现了这个问题。

0.1.1

发布日期:2006 年 2 月 23 日星期四
  • [no_tags]

    对 Function 类进行了小修复,以便 func.foo() 的表达式使用 Function 对象(即左侧)的类型作为布尔表达式的类型,而不是更像移动目标的另一侧(变更集 1020)。

  • [no_tags]

    创建带有反向引用的自引用映射器稍微容易一些(但仍然不是那么容易 - 变更集 1019)

  • [no_tags]

    修复了一对一映射(变更集 1015)

  • [no_tags]

    修复了 psycopg1 日期/时间问题与 None 相关的问题(变更集 1005)

  • [no_tags]

    与 postgres 相关的两个问题,因为它不想给你 “lastrowid”,因为 oids 已弃用

    • 主键列上的 postgres 数据库端默认值确实会预先显式执行,即使这不是 PassiveDefault 的想法。这是因为列上的序列被反射为 PassiveDefaults,但需要在主键列上显式执行,以便我们知道我们刚刚插入了什么。

    • 如果你添加了一行,其中包含一堆数据库端默认值,并且 PassiveDefault 功能以旧的方式工作,即它们只是在数据库端执行,“无法在没有 OID 的情况下取回行” 异常也不会发生,除非有人(通常是 ORM)明确要求它。

  • [no_tags]

    修复了 engine.execute_compiled 的一个故障,它会创建第二个 ResultProxy,但随后被丢弃。

  • [no_tags]

    开始在对象属性中实现较新的逻辑。你现在可以说 myclass.attr.property,这将为你提供与该属性对应的 PropertyLoader,即 myclass.mapper.props[‘attr’]

  • [no_tags]

    急切加载已在内部进行了全面改造,以始终使用别名。现在可以创建更复杂的急切加载链,而无需任何显式的“使用别名”类型的指令。 EagerLoader 代码现在也更简单了。

  • [no_tags]

    关系中添加了一个新的有点实验性的标志 “use_update”,指示此关系应通过第二个 UPDATE 语句处理,要么在主 INSERT 之后,要么在主 DELETE 之前。处理循环行依赖关系。

  • [no_tags]

    添加了 exceptions 模块,所有引发的异常(除了一些 KeyError/AttributeError 异常外)都派生自这些类。

  • [no_tags]

    修复了 MySQL 的日期类型,返回的 timedelta 转换为 datetime.time

  • [no_tags]

    两阶段 objectstore.commit 操作(即 begin/commit)现在返回一个事务对象 (SessionTrans),以更清楚地指示事务边界。

  • [no_tags]

    向 schema 添加了带有 create/drop 支持的 Index 对象

  • [no_tags]

    修复了 postgres,如果表上的 PassiveDefault 是主键列,它将显式预先执行,根据正在进行的“我们无法从 postgres 取回插入的行”问题

  • [no_tags]

    更改为 information_schema 查询,该查询取回 postgres 表定义,现在使用显式 JOIN 关键字,因为一位用户在使用 8.1 时获得了更快的性能

  • [no_tags]

    修复了 engine.process_defaults,使其可以正确处理具有不同列名/列键的表(变更集 982)

  • [no_tags]

    一列只能附加到一个表 - 现在已断言这一点

  • [no_tags]

    postgres time 类型派生自 Time 类型

  • [no_tags]

    修复了 alltests,以便它运行 types 测试(现在命名为 testtypes)

  • [no_tags]

    修复了 Join 对象,以便它正确导出其外键(cs 973)

  • [no_tags]

    修复了针对使用继承的映射器创建关系(cs 973)