SqlAlchemy 2.0 中文文档(六十八)(3)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: SqlAlchemy 2.0 中文文档(六十八)

SqlAlchemy 2.0 中文文档(六十八)(2)https://developer.aliyun.com/article/1560740


0.5.6

发布日期:Sat Sep 12 2009

orm

  • [orm]
    修复了继承主键的一部分在更新时会失败的错误。持续。
    引用:#1300
  • [orm]
    修复了一个 bug,不允许多对多双向引用的一侧声明自身为“viewonly”
    参考:#1507
  • [orm]
    添加了一个断言,防止@validates 函数或其他 AttributeExtension 加载未加载的集合,从而可能损坏内部状态。
    参考:#1526
  • [orm]
    修复了一个 bug,阻止了两个实体在单个 flush()中相互替换主键值的某些操作顺序。
    参考:#1519
  • [orm]
    修复了一个隐晦的问题,即具有基类上自引用的延迟加载的连接表子类将使用来自父类的“子类”表的数据填充相关对象的“子类”表。
    参考:#1485
  • [orm]
    relations()现在具有更大的“覆盖”能力,意味着显式指定覆盖父类 relation()的子类将在 flush 期间被尊重。目前支持具体继承设置中的多对多关系。除此之外,效果可能有所不同。
    参考:#1477
  • [orm]
    从   relation()中挤出了更多不必要的“懒加载”。当集合发生变化时,另一侧的多对一反向引用不会触发加载“旧”值,除非设置了“single_parent=True”。直接赋值多对一仍会加载“旧”值以更新该值上的反向引用集合,该值可能已经存在于会话中,从而保持  0.5 行为契约。
    参考:#1483
  • [orm]
    修复了一个 bug,即基于 column_property()或类似属性的连接表继承属性的加载/刷新将无法评估。
    参考:#1480
  • [orm]
    改进了对 MapperProperty 对象覆盖非具体继承设置中继承映射器的支持 - 属性扩展不会随机冲突。
    参考:#1488
  • [orm]
    标准  SQL 中的 UPDATE 和 DELETE 不支持 ORDER BY、LIMIT、OFFSET 等。如果调用了  limit()、offset()、order_by()、group_by()或 distinct(),Query.update()和  Query.delete()现在会引发异常。
    参考:#1487
  • [orm]
    将 AttributeExtension 添加到 sqlalchemy.orm.all
  • [orm]
    当使用非 SQL /entity 表达式调用 query()时,改进了错误消息。
    参考:#1476
  • [orm]
    在基类以及子类中使用 False 或 0 作为多态鉴别器现在也可以正常工作。
    参考:#1440
  • [orm]
    向 Query 中添加了 enable_assertions(False),用于禁用对预期状态的常规断言 - 由 Query 子类使用以设计自定义状态。参见www.sqlalchemy.org/trac/wiki/UsageRecipes/PreFilteredQuery以获取示例。
    参考资料:#1424
  • [ORM]
    修复了递归问题,该问题会在映射对象的 len()或 nonzero()方法导致状态更改时发生。
    参考资料:#1501
  • [ORM]
    修复了 Weak/StrongIdentityMap.add()中的错误异常引发。
    参考资料:#1506
  • [ORM]
    修复了 query.join()中“找不到 FROM 子句”的错误消息,如果查询针对纯 SQL 构造,则无法正确发出。
    参考资料:#1522
  • [ORM]
    修复了一个有点假设性的问题,该问题会导致使用旧的 polymorphic_union 函数的映射器计算出错的主键 - 但这是旧的东西。
    参考资料:#1486

SQL

  • [SQL]
    修复了 column.copy()的问题,以便复制默认值和 onupdates。
    参考资料:#1373
  • [SQL]
    修复了在 0.5.4 中引入的 extract()中的一个错误,其中字符串“field”参数被视为 ClauseElement,导致更复杂的 SQL 转换中出现各种错误。
  • [SQL]
    诸如 DISTINCT 之类的一元表达式将其类型处理传播到结果集,从而允许进行类似 unicode 等的转换。
    参考资料:#1420
  • [SQL]
    修复了 Table 和 Column 中传递空字典作为“info”参数会引发异常的错误。
    参考资料:#1482

Oracle

  • [Oracle]
    将 0.6 版本的 Oracle 别名名称不被截断的修复引入到 0.6 中。
    参考资料:#1309

杂项

  • [扩展]
    由 associationproxy 生成的集合代理现在可以进行 pickle 化。然而,用户定义的 proxy_factory 除非定义了 getstatesetstate,否则仍然不能 pickle 化。
    参考资料:#1446
  • [扩展]
    如果将 table_args 作为没有字典参数的元组传递,Declarative 将引发一个提供信息的异常。改进了文档。
    参考资料:#1468
  • [扩展]
    在 MetaData 中声明的 Table 对象现在可以在发送到 primaryjoin/secondaryjoin/secondary 的字符串表达式中使用 - 名称从声明基类的 MetaData 中提取。
    参考资料:#1527
  • [扩展]
    在构造类之后(即通过类级属性分配),可以向连接表子类添加列。该列始终添加到底层表中,但现在映射器将重建其“join”以包括新列,而不是引发关于“没有这样的列,请改用 column_property()”的错误。
    参考:#1523
  • [测试]
    在测试套件中添加了示例,以便定期执行,并清理了一些弃用警告。

ORM

  • [ORM]
    修复了一个问题,即继承的复合主键的鉴别器部分在更新时会失败。继续。
    参考:#1300
  • [ORM]
    修复了一个问题,该问题不允许双向多对多引用的一侧声明自己为“viewonly”。
    参考:#1507
  • [ORM]
    添加了一个断言,防止@validates 函数或其他 AttributeExtension 加载未加载的集合,从而可能损坏内部状态。
    参考:#1526
  • [ORM]
    修复了一个问题,该问题阻止两个实体在单个 flush()中相互替换主键值的某些操作顺序。
    参考:#1519
  • [ORM]
    修复了一个晦涩的问题,即具有基类上自引用贪婪加载的连接表子类将使用来自父类“子类”表的数据填充相关对象的“子类”表。
    参考:#1485
  • [ORM]
    relations()现在具有更大的“覆盖”能力,这意味着明确指定覆盖父类的关系()的子类将在 flush 期间受到尊重。目前,这是为了支持具体继承设置的多对多关系。除此用例外,效果可能有所不同。
    参考:#1477
  • [ORM]
    从   relation()中挤出了更多不必要的“懒加载”。当集合发生变化时,另一侧的多对一反向引用不会触发加载“旧”值,除非设置了“single_parent=True”。直接分配一个多对一仍然会加载“旧”值,以便更新该值上的反向引用集合,该值可能已经存在于会话中,从而保持  0.5 行为契约。
    参考:#1483
  • [ORM]
    修复了一个问题,即基于 column_property()或类似属性的连接表继承属性的加载/刷新将无法评估。
    参考:#1480
  • [ORM]
    改进了对 MapperProperty 对象覆盖非具体继承设置的继承映射器的支持 - 属性扩展不会随机冲突。
    参考:#1488
  • [orm]
    标准  SQL 不支持 UPDATE 和 DELETE 中的 ORDER BY、LIMIT、OFFSET 等。如果调用了  limit()、offset()、order_by()、group_by()或 distinct()中的任何一个,Query.update()和  Query.delete()现在会引发异常。
    参考:#1487
  • [orm]
    将 AttributeExtension 添加到 sqlalchemy.orm.all
  • [orm]
    当使用非 SQL /实体表达式调用 query()时,改进了错误消息。
    参考:#1476
  • [orm]
    在基类和子类上使用 False 或 0 作为多态鉴别器现在也可以正常工作。
    参考:#1440
  • [orm]
    在 Query 中添加了 enable_assertions(False),用于禁用通常的对预期状态的断言 - 由 Query 子类用于设计自定义状态。参见www.sqlalchemy.org/trac/wiki/UsageRecipes/PreFilteredQuery以获取示例。
    参考:#1424
  • [orm]
    修复了递归问题,如果映射对象的 len()或 nonzero()方法导致状态更改,则会发生。
    参考:#1501
  • [orm]
    修复了 Weak/StrongIdentityMap.add()中不正确的异常抛出。
    参考:#1506
  • [orm]
    修复了在 query.join()中“找不到 FROM 子句”错误消息,如果查询针对纯 SQL 构造,则无法正确发出。
    参考:#1522
  • [orm]
    修复了一个有点假设的问题,即使用旧的 polymorphic_union 函数计算映射器的错误主键 - 但这是旧的东西。
    参考:#1486

sql

  • [sql]
    修复了 column.copy()以复制默认值和 onupdates。
    参考:#1373
  • [sql]
    修复了在 0.5.4 中引入的 extract()中的错误,其中字符串“field”参数被视为 ClauseElement,导致更复杂的 SQL 转换中出现各种错误。
  • [sql]
    一元表达式(如 DISTINCT)将其类型处理传播到结果集,允许进行类似 unicode 的转换。
    参考:#1420
  • [sql]
    修复了 Table 和 Column 中传递空字典给“info”参数会引发异常的 bug。
    参考:#1482

oracle

  • [oracle]
    为 Oracle 别名名称未被截断的 0.6 修复进行了回溯。
    参考:#1309

杂项

  • [ext]
    associationproxy 生成的集合代理现在是可 pickle 的。然而,用户定义的 proxy_factory 仍然不可 pickle,除非它定义了 getstatesetstate
    参考:#1446
  • [ext]
    如果将 table_args 作为没有字典参数的元组传递给 Declarative,将引发一个信息性异常。改进了文档。
    参考:#1468
  • [ext]
    在 MetaData 中声明的 Table 对象现在可以在发送到 primaryjoin/secondaryjoin/secondary 的字符串表达式中使用 - 名称从 declarative base 的 MetaData 中提取。
    参考:#1527
  • [ext]
    在构造类后(即通过类级属性赋值)可以向 joined-table 子类添加列。该列始终添加到底层表中,但现在映射器将重建其“join”以包括新列,而不是引发关于“没有这样的列,请改用 column_property()”的错误。
    参考:#1523
  • [test]
    将示例添加到测试套件中,以便定期执行,并清理了一些弃用警告。

0.5.5

发布日期:2009 年 7 月 13 日星期一

一般

  • [general]
    单元测试已从 unittest 迁移到 nose。有关如何运行测试的信息,请参阅 README.unittests。
    参考:#970

orm

  • [orm]
    relation()的“foreign_keys”参数现在将自动传播到同一  backref 中,就像 primaryjoin 和 secondaryjoin 一样。对于极为罕见的情况,即 relation()的  backref 有意不同的“foreign_keys”配置,现在两侧都需要显式配置(如果它们确实需要此设置,请参阅下一个注释…)。
  • [orm]
    …唯一已知的(而且真的非常罕见)使用情况是,在前向/后向方面使用了不同的 foreign_keys 设置,部分指向自身列的复合外键已经得到增强,以便关系的 fk->itself 方面不会用于确定关系方向。
  • [orm]
    Session.mapper 现在已被弃用
    如果您希望一个独立的对象成为会话的一部分,请调用 session.add()。否则,现在在www.sqlalchemy.org/trac/wiki/UsageRecipes/SessionAwareMapper上记录了 Session.mapper 的 DIY 版本。该方法将在 0.6 版本中继续被弃用。
  • [orm]
    修复了  Query 能够从 joined-table 子类实体的单独列(即 query(SubClass.foo,  SubClass.bar).join())进行 join()的问题。在大多数情况下,会引发错误“找不到要加入的 FROM  子句”。在少数情况下,结果将以基类而不是子类的形式返回 - 因此依赖于这种错误结果的应用程序需要进行调整。
    参考:#1431
  • [orm]
    修复了涉及 contains_eager()的错误,该错误会在特定情况下将其应用于次要(即懒加载)加载,从而产生笛卡尔积。改进了对次要加载上的 query.options()的定位。
    参考:#1461
  • [orm]
    修复了 0.5.4 版本引入的 bug,即当默认保持列被刷新时,复合类型会失败。
  • [orm]
    修复了另一个 0.5.4 版本的 bug,即当整个对象被序列化时,可变属性(即 PickleType)无法正确反序列化。
    参考:#1426
  • [orm]
    修复了 session.is_modified()在使用任何同义词时会引发异常的 bug。
  • [orm]
    修复了潜在的内存泄漏问题,即以前被 pickled 的对象放回会话后,除非显式关闭 Session,否则不会完全被垃圾回收。
  • [orm]
    修复了基于列表的属性(如 pickletype 和 PGArray)未能正确合并的 bug。
  • [orm]
    修复了 attributes.set_committed_value 函数无法正常工作的问题。
  • [orm]
    修剪了 InstanceState 的 pickle 格式,这应进一步减少 pickled 实例的内存占用。该格式应向后兼容 0.5.4 及以前的版本。
  • [orm]
    sqlalchemy.orm.join 和 sqlalchemy.orm.outerjoin 现在添加到 sqlalchemy.orm.*的 all 中。
    参考:#1463
  • [orm]
    修复了当传递给 get()的复合主键值过短时,Query 异常引发失败的 bug。
    参考:#1458

sql

  • [sql]
    移除了 execute()的一个晦涩特性(包括  connection、engine、Session),即可以将 bindparam()构造作为 params  字典的键发送。这种用法未记录在案,并且是一个问题的核心,即 text()构造隐式创建的 bindparam()对象可能具有与放置在 params   字典中的字符串相同的哈希值,并且在计算最终绑定参数时可能导致不适当的匹配。对于可能使用此功能的任何应用程序来说,这是一个向后不兼容的更改,但是该功能从未被记录在案。

misc

  • [engine/pool]
    为 StaticPool 实现了 recreate()。

general

  • [general]
    单元测试已从 unittest 迁移到 nose。有关如何运行测试的信息,请参阅 README.unittests。
    参考:#970

orm

  • [orm]
    relation()的“foreign_keys”参数现在会自动传播到  backref,就像 primaryjoin 和 secondaryjoin 一样。对于极为罕见的情况,即 relation()的  backref 有意配置了不同的“foreign_keys”,现在两侧都需要显式配置(如果它们确实需要这个设置,请参见下一个注释…)。
  • [orm]
    …唯一已知的(而且真的非常罕见)使用不同 foreign_keys 设置在前向/后向方向上的情况,部分指向自己列的复合外键,已经增强,使得关系的 fk->itself 方面不会用于确定关系方向。
  • [orm]
    Session.mapper 现在已经弃用
    如果您希望一个独立的对象成为会话的一部分,请调用 session.add()。否则,现在在www.sqlalchemy.org/trac/wiki/UsageRecipes/SessionAwareMapper上记录了 Session.mapper 的 DIY 版本。该方法将在整个 0.6 版本中保持弃用。
  • [orm]
    修复了  Query 能够从连接表子类实体的单个列进行 join()的 bug,即 query(SubClass.foo,  SubClass.bar).join()。在大多数情况下,会引发错误“找不到要加入的 FROM  子句”。在少数情况下,结果将以基类而不是子类的形式返回,因此依赖于这个错误结果的应用程序需要进行调整。
    参考:#1431
  • [orm]
    修复了涉及 contains_eager()的 bug,在一个特定罕见情况下会应用于次要(即懒加载)加载,产生笛卡尔积。改进了对次要加载上的 query.options()的定位。
    参考:#1461
  • [orm]
    修复了 0.5.4 中引入的 bug,即当刷新默认保持列时,复合类型会失败。
  • [orm]
    修复了 0.5.4 中的另一个 bug,即可变属性(即 PickleType)在整个对象被序列化时无法正确反序列化。
    参考:#1426
  • [orm]
    修复了 session.is_modified()在使用任何同义词时会引发异常的 bug。
  • [orm]
    修复了潜在的内存泄漏 bug,即以前 pickled 的对象重新放入会话中时,除非显式关闭 Session,否则不会完全被垃圾回收。
  • [orm]
    修复了基于列表的属性(如 pickletype 和 PGArray)未能正确合并()的 bug。
  • [orm]
    修复了不起作用的 attributes.set_committed_value 函数。
  • [orm]
    修剪了 InstanceState 的 pickle 格式,这应该进一步减少 pickled 实例的内存占用。该格式应该向后兼容 0.5.4 及之前的版本。
  • [orm]
    sqlalchemy.orm.join 和 sqlalchemy.orm.outerjoin 现在已添加到 sqlalchemy.orm.*的 all 中。
    参考:#1463
  • [orm]
    修复了当向 get()传递太短的复合主键值时,Query 异常引发失败的错误。
    参考:#1458

sql

  • [sql]
    移除了 execute()的一个晦涩特性(包括  connection、engine、Session),其中 bindparam()构造可以作为 params  字典的键发送。这种用法未记录在案,并且是一个问题的核心,即 text()构造隐式创建的 bindparam()对象可能具有与放置在 params   字典中的字符串相同的哈希值,并且在计算最终绑定参数时可能导致不恰当的匹配。对于这种情况的内部检查将显著增加关键任务参数渲染的延迟,因此移除了该行为。对于可能使用此功能的任何应用程序,这是一个不兼容的更改,但是该功能从未被记录。

杂项

  • [engine/pool]
    为 StaticPool 实现了 recreate()。

0.5.4p2

发布日期:2009 年 5 月 26 日星期二

sql

  • [sql]
    修复了不基于参数或不是 executemany()风格的 SQL 异常打印。

postgresql

  • [postgresql]
    弃用了硬编码的 TIMESTAMP  函数,当作为 func.TIMESTAMP(value)使用时,会呈现“TIMESTAMP value”。这在某些平台上会出现问题,因为  PostgreSQL 不允许在此上下文中使用绑定参数。硬编码的大写也是不合适的,我们需要支持很多其他 PG 转换。因此,使用文本构造,即  select([“timestamp ‘12/05/09’”])。

sql

  • [sql]
    修复了不基于参数或不是 executemany()风格的 SQL 异常打印。

postgresql

  • [postgresql]
    弃用了硬编码的 TIMESTAMP  函数,当作为 func.TIMESTAMP(value)使用时,会呈现“TIMESTAMP value”。这在某些平台上会出现问题,因为  PostgreSQL 不允许在此上下文中使用绑定参数。硬编码的大写也是不合适的,我们需要支持很多其他 PG 转换。因此,使用文本构造,即  select([“timestamp ‘12/05/09’”])。

0.5.4p1

发布日期:2009 年 5 月 18 日星期一

orm

  • [orm]
    修复了 0.5.4 中引入的属性错误,当使用不完整对象进行 merge()时会发生。

orm

  • [orm]
    修复了 0.5.4 中引入的属性错误,当使用不完整对象进行 merge()时会发生。

0.5.4

发布日期:2009 年 5 月 17 日星期日

orm

  • [orm]在与大型映射器图、大量对象一起使用时,关于 Sessions/flush()的显著性能增强:
  • 从 flush()过程中移除了所有* O(N)扫描行为,即扫描整个会话的操作,包括一个极其昂贵的操作,错误地假设主键值正在更改,而实际情况并非如此。
  • 仍然存在一个边缘情况,可能会调用完整扫描,如果现有的主键属性被修改为新值。
  • 会话的“弱引用”行为现在是完全的 - 对映射对象或相关项/集合在其 dict 中不再进行任何强引用。对象中的反向引用和其他循环不再影响会话丢失对未修改对象的所有引用的能力。具有待处理更改的对象仍然会在 flush 之前被强制保留。
    该实现还通过将垃圾回收项的“复活”过程仅适用于映射“可变”属性(即 PickleType、复合属性)来提高性能。这消除了 gc 过程的开销,并简化了内部行为。
    如果“可变”属性更改是对象上唯一的更改,然后该对象被取消引用,那么在发出 UPDATE 时,映射器将无法访问其他属性状态。这可能会对某些 MapperExtensions 产生不同的影响。
    此更改还影响了内部属性 API,但不影响 AttributeExtension 接口或任何公开文档化的属性函数。
  • 工作单元在 flush()期间不再为整个映射器图生成“依赖”处理器图,而是仅为表示具有待处理更改的对象的那些映射器创建这样的处理器。在大型相互连接的映射器图的上下文中,这节省了大量的方法调用。
  • 缓存了以前在每次 flush 时多次发生的“表排序”操作,还从 flush()中删除了大量的方法调用次数。
  • 在 mapper._save_obj()中简化了其他冗余行为。
  • 参考:#1398
  • [orm]
    修改了 DynamicAttributeImpl 上的 query_cls,以接受 AppenderQuery 的完整 mixin 版本,这允许对 AppenderMixin 进行子类化。
  • [orm]
    “多态鉴别器”列可能是主键的一部分,并且将填充正确的鉴别器值。
    参考:#1300
  • [orm]
    修复了评估器无法评估 IS NULL 子句的问题。
  • [orm]
    修复了“dynamic”关系上的“set collection”函数以正确启动事件。以前,只能将集合分配给待处理的父实例,否则修改事件将无法正确触发。现在,set collection 与 merge()兼容,修复了问题。
    参考:#1352
  • [orm]
    允许对使用  instrumented descriptors 构造的 PropertyOption 对象进行  pickle;以前,在对加载了基于描述符的选项的对象进行 pickle 时会出现 pickle 错误,例如  query.options(eagerload(MyClass.foo))。
  • [orm]
    如果“lazy load” SQL 子句与 get()使用的子句匹配,但包含一些硬编码参数,则惰性加载器将不使用 get()。以前,惰性策略会因为 get()失败。理想情况下,应该使用带有硬编码参数的 get(),但这需要进一步开发。
    参考:#1357
  • [orm]
    现在,与  query.options()关联的 MapperOptions  和其他状态不再在每次加载期间与每个惰性/延迟加载属性相关联的可调用对象中捆绑。这些选项现在与实例的状态对象关联一次,当它被填充时。这在大多数情况下消除了每个实例/属性加载器对象的需要,提高了单个实例的加载速度和内存开销。
    参考:#1391
  • [orm]
    修复了另一个位置,其中自动刷新干扰了 session.merge()。现在在 merge()期间完全禁用了 autoflush。
    参考:#1360
  • [orm]
    修复了阻止“可变主键”依赖逻辑在一对一 relation()上正常运行的错误。
    参考:#1406
  • [orm]
    修复了 relation()中的错误,该错误在 0.5.3 中引入,其中从基类到连接表子类的自引用关系不会正确配置。
  • [orm]
    修复了继承映射器使用时的模糊编译问题,这会导致未初始化的属性。
  • [orm]
    修复了 session weak_identity_map 的文档错误-默认值为 True,表示正在使用弱引用映射。
  • [orm]
    修复了一个工作单元问题,即在要删除的对象所拥有的集合中的项目上的外键属性如果 relation()是自引用的,则不会设置为 None。
    参考:#1376
  • [orm]
    修复了 Query.update()和 Query.delete()在急加载关系中的失败。
    参考:#1378
  • [orm]
    现在,在 foreign_keys 或 remote_side 集合中指定二进制主连接条件的两列是一个错误。而以前只是荒谬的,但以一种非确定性的方式成功。

sql

  • [sql]
    从 SQLA 0.6 中回溯了“compiler”扩展。这是一个标准化接口,允许创建自定义 ClauseElement 子类和编译器。特别是作为 text()的替代方案很方便,当您想要构建具有数据库特定编译的构造时。有关详细信息,请参阅扩展文档。
  • [sql]
    当绑定参数列表大于 10 时,异常消息会被截断,防止大量的多页异常填满屏幕和大型 executemany()语句的日志文件。
    参考:#1413
  • [sql]
    sqlalchemy.extract() 现在是方言敏感的,并且可以在支持的数据库中惯用地提取时间戳组件,包括 SQLite。
  • [sql]
    修复了从 clause_element() 样式构造的 ForeignKey 上的 repr() 和其他 _get_colspec() 方法(即声明性列)。
    参考:#1353

schema

  • [schema] [1341] [ticket: 594]
    向 IdentifierPreparer 类添加了 quote_schema() 方法,以便方言可以重写模式的处理方式。这使得 MSSQL 方言可以将模式视为多部分标识符,例如 ‘database.owner’。

extensions

  • [extensions]
    修复了将延迟或其他列属性添加到声明性类的问题。
    参考:#1379

mysql

  • [mysql]
    反射 FOREIGN KEY 构造将考虑点分模式.表名组合,如果外键引用远程模式中的表。
    参考:#1405

sqlite

  • [sqlite]
    修正了 SLBoolean 类型,使其正确地将只有 1 视为 True。
    参考:#1402
  • [sqlite]
    修正了 float 类型,使其在反射时正确地映射到 SLFloat 类型。
    参考:#1273

mssql

  • [mssql]
    修改了保存点逻辑的工作方式,以防止其干扰非保存点导向的例程。保存点支持仍然非常实验性。
  • [mssql]
    添加了适用于 MSSQL 的保留字,涵盖了 2008 年及以前的所有版本。
    参考:#1310
  • [mssql]
    修正了信息模式在基于二进制排序的数据库上不起作用的问题。清理了信息模式,因为它现在只由 mssql 使用。
    参考:#1343

orm

  • [orm]在与大型映射器图、大量对象一起使用时,针对 Sessions/flush() 的显著性能增强:
  • 从 flush() 过程中删除了所有* O(N) 扫描行为,即扫描整个会话的操作,包括一个极其昂贵的操作,错误地假定主键值正在更改,而事实并非如此。
  • 仍然存在一个边缘情况,可能会触发完全扫描,如果现有的主键属性被修改为新值。
  • 会话的“弱引用”行为现在是完整的 - 在其 dict 中不再对映射对象或相关项目/集合进行任何强引用。对象中的反向引用和其他循环不再影响会话完全失去对未修改对象的所有引用的能力。具有待处理更改的对象仍然会强烈保留,直到 flush。
    该实现还通过将垃圾回收项的“复活”过程仅与映射“可变”属性(即 PickleType、复合属性)相关的映射器相关联,从而提高了性能。这消除了 gc 过程的开销,并简化了内部行为。
    如果“可变”属性更改是对象上唯一的更改,然后该对象被取消引用,那么在发出 UPDATE 时,映射器将无法访问其他属性状态。这可能会对某些 MapperExtensions 产生不同的影响。
    这一变化也影响了内部属性 API,但不影响 AttributeExtension 接口,也不影响任何公开文档中记录的属性函数。
  • 工作单元在 flush() 期间不再为整个映射器图生成“依赖”处理器图,而是仅为表示具有待处理更改的对象的那些映射器创建这样的处理器。这在大型互连映射器图的情况下节省了大量方法调用。
  • 优化了以前每次刷新都会发生多次“表排序”操作的性能浪费,同时还从 flush() 中删除了大量方法调用次数。
  • 其他冗余行为已经在 mapper._save_obj() 中简化。
  • 参考:#1398
  • [orm]
    修改了 DynamicAttributeImpl 上的 query_cls,以接受 AppenderQuery 的完整混合版本,这允许对 AppenderMixin 进行子类化。
  • [orm]
    “多态鉴别器”列可以是主键的一部分,并且将填充正确的鉴别器值。
    参考:#1300
  • [orm]
    修复了评估器无法评估 IS NULL 子句的问题。
  • [orm]
    修复了在“动态”关系上的“设置集合”函数无法正确触发事件的问题。以前,只能将集合分配给待处理的父实例,否则修改事件将无法正确触发。现在,设置集合与 merge() 兼容,修复了这个问题。
    参考:#1352
  • [orm]
    允许对使用  instrumented descriptors 构建的 PropertyOption 对象进行 pickling;以前,在 pickle  一个使用基于描述符的选项(例如 query.options(eagerload(MyClass.foo))加载的对象时,会出现 pickle  错误。
  • [orm]
    如果“延迟加载”SQL 子句与 get() 使用的子句匹配,但包含一些硬编码参数,则惰性加载器将不使用 get()。以前,惰性策略会在 get() 中失败。理想情况下,应该使用带有硬编码参数的 get(),但这需要进一步开发。
    参考:#1357
  • [orm]
    MapperOptions  和与  query.options()关联的其他状态不再在每次加载期间与每个延迟/延迟加载属性相关的可调用对象捆绑在一起。现在,选项仅在填充实例时与实例的状态对象关联一次。这在大多数情况下消除了每个实例/属性加载器对象的需要,提高了单个实例的加载速度和内存开销。
    参考:#1391
  • [orm]
    修复了另一个位置,其中 autoflush 干扰了 session.merge()。现在,在 merge()期间完全禁用 autoflush。
    参考:#1360
  • [orm]
    修复了阻止“可变主键”依赖逻辑在一对一关系()上正常运行的错误。
    参考:#1406
  • [orm]
    修复了在 0.5.3 版本中引入的 relation()中的错误,即从基类到连接表子类的自引用关系将无法正确配置。
  • [orm]
    修复了当使用继承映射器时会导致未初始化属性的模糊映射器编译问题。
  • [orm]
    修复了 session weak_identity_map 的文档 - 默认值为 True,表示正在使用弱引用映射。
  • [orm]
    修复了一个工作单元问题,即在要删除的对象拥有的集合中的项目上的外键属性如果关系()是自引用的,则不会设置为 None。
    参考:#1376
  • [orm]
    修复了 Query.update()和 Query.delete()在预加载关系时的失败。
    参考:#1378
  • [orm]
    现在,在 foreign_keys 或 remote_side 集合中指定二进制 primaryjoin 条件的两个列是一个错误。而以前只是荒谬的,但会以一种非确定性的方式成功。

sql

  • [sql]
    从 SQLA 0.6 版本中回溯了“编译器”扩展。这是一个标准化接口,允许创建自定义的 ClauseElement 子类和编译器。特别是当您想要构建具有特定于数据库的编译的构造时,它是 text()的一个替代方案。有关详细信息,请参阅扩展文档。
  • [sql]
    当绑定参数列表大于 10 时,异常消息将被截断,防止大型 executemany()语句填满屏幕和日志文件。
    参考:#1413
  • [sql]
    sqlalchemy.extract()现在是方言敏感的,并且可以在支持的数据库中习惯地提取时间戳的组件,包括 SQLite。
  • [sql]
    修复了由 clause_element()样式构造(即声明列)构造的 ForeignKey 上的 repr()和其他 _get_colspec()方法。
    参考:#1353

schema

  • [模式] [1341] [票号:594]
    添加了一个 quote_schema() 方法到 IdentifierPreparer 类,以便方言可以覆盖如何处理模式。这使得 MSSQL 方言可以将模式视为多部分标识符,例如 ‘database.owner’。

[扩展]

  • [扩展]
    修复了将延迟或其他列属性添加到声明类的问题。
    参考:#1379

mysql

  • [mysql]
    反射 FOREIGN KEY 构造将考虑到点分模式.表名组合,如果外键引用远程模式中的表。
    参考:#1405

[sqlite]

  • [sqlite]
    修正了 SLBoolean 类型,使其正确地将只有 1 视为 True。
    参考:#1402
  • [sqlite]
    修正了 float 类型,使其在反射时正确映射为 SLFloat 类型。
    参考:#1273

mssql

  • [mssql]
    修改了保存点逻辑的工作方式,以防止它干扰非保存点导向的例程。保存点支持仍然是非常实验性的。
  • [mssql]
    添加了 MSSQL 的保留字,涵盖了 2008 版本和所有之前的版本。
    参考:#1310
  • [mssql]
    修正了与基于二进制排序的数据库不兼容的信息模式的问题。清理了信息模式,因为现在只有 mssql 在使用。
    参考:#1343

0.5.3

发布日期:2009 年 3 月 24 日 星期二

ORM

  • [ORM]
    对于 session.flush() 的 “objects” 参数已被弃用。表示父对象和子对象之间链接的状态不支持在链接的一侧处于“flushed”状态而在另一侧不是,因此支持此操作会导致误导性的结果。
    参考:#1315
  • [ORM]
    Query 现在实现了 clause_element(),它产生其可选择的,这意味着 Query 实例可以在许多 SQL 表达式中被接受,包括 col.in_(query),union(query1, query2),select([foo]).select_from(query) 等。
  • [ORM]
    Query.join() 现在可以构造多个 FROM 子句,如果需要的话。例如,query(A, B).join(A.x).join(B.y) 可能会生成 SELECT A., B. FROM A JOIN X, B JOIN Y。Eager loading 也可以将其连接附加到这些多个 FROM 子句上。
    参考:#1337
  • [ORM]
    修复了 dynamic_loader() 中的 bug,其中在构建后未传播追加/移除事件到 UOW 以进行 flush()。
    参考:#1347
  • [ORM]
    修复了在未检查 column_prefix 的情况下不映射已经存在类级别名称的属性的 bug。
  • [ORM]
    对特定集合属性的 session.expire()也会清除任何挂起的反向引用添加,以便下一次访问正确地只返回数据库中存在的内容。虽然我们正在考虑完全删除 flush([objects])功能,但也提供了一定程度的解决方案。
    参考:#1315
  • [orm]
    Session.scalar()现在将原始 SQL 字符串转换为 text(),与 Session.execute()相同,并接受相同的替代**kw args。
  • [orm]
    改进了 relation()的“确定方向”逻辑,以便可以确定复杂情况的方向,比如 mapper(A.join(B)) -> relation-> mapper(B)。
  • [orm]
    使用 session.flush([somelist])刷新对象的部分集合时,操作后保留的挂起对象不会不经意地被添加为持久对象。
    参考:#1306
  • [orm]
    添加了“post_configure_attribute”方法到 InstrumentationManager,以便“listen_for_events.py”示例再次起作用。
    参考:#1314
  • [orm]
    发现了前向和补充的反向引用,两者都是相同方向的,即 ONETOMANY 或 MANYTOONE,并引发了错误消息。以后可以避免疯狂的 CircularDependencyErrors。
  • [orm]修复了 Query 在同时选择具有相同基类的多个联接表继承实体时的错误:
  • 以前对“A JOIN B”上的“B”的适应会错误地部分应用到“A”上。
  • 在关系比较(即 A.related==someb)时,当应该进行适应时没有适应。
  • 其他过滤,比如 query(A).join(A.bs).filter(B.foo==‘bar’),错误地将“B.foo”适应为“A”。
  • [orm]
    修复了在与左侧的别名对象和 of_type()右侧一起使用 EXISTS 子句的适应。
    参考:#1325
  • [orm]
    在 sqlalchemy.orm.attributes 中添加了一个属性助手方法set_committed_value。给定对象、属性名称和值,将值设置在对象上作为其“已提交”状态的一部分,即被理解为从数据库加载的状态。有助于创建自制集合加载器等。
  • [orm]
    当传递非映射器/类的被仪器化描述符时,查询不会因为弱引用错误而失败,而是引发“无效的列表达式”。
  • [orm]
    Query.group_by()正确考虑了应用于 FROM 子句的别名,比如 select_from(),使用 with_polymorphic(),或使用 from_self()。

sql

  • [sql]
    select()的 alias()在明确的标量上下文中使用时将转换为“标量子查询”,即它在比较操作中使用。当使用 query.subquery()时,这也适用于 ORM。
  • [sql]
    在 select() 中使用 use_labels(例如在 ORM column_property() 中使用时)时,Function 对象上的 _label 属性等属性不会丢失。
    参考:#1302
  • [sql]
    匿名别名现在会截断到方言允许的最大长度。在像 Oracle 这样具有非常小字符限制的数据库上更为重要。
    参考:#1309
  • [sql]
    selectable() 接口已完全被 clause_element() 取代。
  • [sql]
    TypeEngine 用于缓存特定于方言的类型的每个方言缓存现在是 WeakKeyDictionary。这是为了防止方言对象被引用,对于创建任意数量的引擎或方言的应用程序,这会永远存在。这会带来一些性能损失,将在 0.6 中解决。
    参考:#1299

extensions

  • [extensions]
    修复了序列化器中的递归 pickling 问题,由 EXISTS 或其他嵌入的 FROM 构造触发。
  • [extensions]
    Declarative 使用 bases 中的搜索来定位 “inherits” 类,以跳过局部于子类的混入。
  • [extensions]
    即使显式给出 “inherits” 映射器参数,Declarative 也会找出联接表继承的主要联接条件。
  • [extensions]
    如果 backref() 的 “foreign_keys” 参数是字符串,Declarative 将正确解释它。
  • [extensions]
    当与 table 结合使用时,Declarative 将接受一个绑定到表的列作为属性,如果该列已经存在于 table 中。该列将被重新映射到给定的键,方式与添加到 mapper() 属性字典时相同。

postgresql

  • [postgresql]
    当遇到具有多个表达式的索引时,索引反射不会失败。
  • [postgresql]
    向 sqlalchemy.databases.postgres 添加了 PGUuid 和 PGBit 类型。
    参考:#1327
  • [postgresql]
    当这些类型在域内指定时,未知 PG 类型的反射不会崩溃。
    参考:#1327

sqlite

  • [sqlite]
    修复了 SQLite 反射方法,以便在最近版本的 pysqlite 上检测到不存在的 cursor.description,触发自动关闭游标,以便在调用 fetchone() 时没有行时不会失败。

mssql

  • [mssql]
    对 pymssql 1.0.1 的初步支持
  • [mssql]
    修正了在 mssql 上未遵守 max_identifier_length 的问题。

orm

  • [orm]
    session.flush() 的 “objects” 参数已被弃用。表示父对象和子对象之间链接的状态不支持链接的一侧处于 “flushed�� 状态而另一侧不是,因此支持此操作会导致误导性的结果。
    参考:#1315
  • [orm]
    Query 现在实现了 clause_element(),它生成其可选择的内容,这意味着 Query 实例可以在许多 SQL 表达式中被接受,包括 col.in_(query),union(query1, query2),select([foo]).select_from(query)等。
  • [orm]
    Query.join()现在可以构造多个 FROM 子句,如果需要的话。例如,query(A, B).join(A.x).join(B.y)可能会生成 SELECT A., B. FROM A JOIN X, B JOIN Y。Eager loading 也可以将其连接附加到这些多个 FROM 子句上。
    参考:#1337
  • [orm]
    修复了 dynamic_loader()中在构造后追加/删除事件未传播到 UOW 以在 flush()中捕获的 bug。
    参考:#1347
  • [orm]
    修复了在未检查 column_prefix 之前未映射已具有类级名称的属性的 bug。
  • [orm]
    对特定集合属性进行 session.expire()将清除任何待定的反向引用添加,以便下一次访问正确地返回仅在数据库中存在的内容。对于 flush([objects])功能的某种程度的解决方案,尽管我们正在考虑完全删除它。
    参考:#1315
  • [orm]
    Session.scalar()现在将原始 SQL 字符串转换为 text(),与 Session.execute()相同,并接受相同的替代**kw 参数。
  • [orm]
    改进了 relation()的“确定方向”逻辑,以便可以确定类似 mapper(A.join(B)) -> relation-> mapper(B)这样的棘手情况的方向。
  • [orm]
    使用 session.flush([somelist])刷新部分对象集时,操作后仍保持待定状态的对象不会被意外添加为持久对象。
    参考:#1306
  • [orm]
    添加了“post_configure_attribute”方法到 InstrumentationManager,以便“listen_for_events.py”示例再次起作用。
    参考:#1314
  • [orm]
    现在检测到具有相同方向的前向和补充后向引用,即 ONETOMANY 或 MANYTOONE,并引发错误消息。以后可以避免疯狂的 CircularDependencyErrors。
  • [orm]修复了 Query 中关于同时选择具有共同基类的多个连接表继承实体的 bug:
  • 以前对“A JOIN B”中的“B”的适应会错误地部分应用于“A”。
  • 对关系的比较(即 A.related==someb)在应该适应时未被适应。
  • 其他过滤,如 query(A).join(A.bs).filter(B.foo==’bar’),错误地将“B.foo”适应为“A”。
  • [orm]
    修复了通过 any(),has()等与左侧别名对象和右侧 of_type()结合使用的 EXISTS 子句的适应。
    参考:#1325
  • [orm]
    在 sqlalchemy.orm.attributes 中添加了一个属性助手方法set_committed_value。给定一个对象、属性名称和值,将在对象上设置该值作为其“已提交”状态的一部分,即从数据库加载的状态。有助于创建自制集合加载器等。
  • [orm]
    当传递非映射器/类的受仪器化描述符时,查询不会因弱引用错误而失败,而会引发“无效列表达式”。
  • [orm]
    Query.group_by()正确考虑应用于 FROM 子句的别名,例如使用 select_from()、使用 with_polymorphic()或使用 from_self()。

sql

  • [sql]
    当在明确的标量上下文中使用时,select()的 alias()将转换为“标量子查询”,即在比较操作中使用。当在 ORM 中使用 query.subquery()时也适用。
  • [sql]
    在使用 use_labels(例如在 ORM column_property()中使用时)的 select()中使用 Function 对象时,修复了缺少的 _label 属性等。
    参考:#1302
  • [sql]
    匿名别名现在会截断到方言允许的最大长度。在像 Oracle 这样具有非常小字符限制的数据库上更为重要。
    参考:#1309
  • [sql]
    selectable()接口已完全被 clause_element()取代。
  • [sql]
    TypeEngine 用于缓存特定于方言的类型的每方言缓存现在是 WeakKeyDictionary。这是为了防止方言对象被引用,以便应用程序创建任意数量的引擎或方言。这会有一点性能损失,将在 0.6 中解决。
    参考:#1299

extensions

  • [extensions]
    修复了序列化器中的递归 pickling 问题,由 EXISTS 或其他嵌入的 FROM 构造触发。
  • [extensions]
    Declarative 通过 bases 搜索定位“inherits”��,以跳过子类本地的混入。
  • [extensions]
    即使明确给出“inherits”映射器参数,声明性图形也会找出连接表继承的主连接条件。
  • [extensions]
    如果“foreign_keys”参数是字符串,Declarative 将正确解释 backref()上的“foreign_keys”参数。
  • [extensions]
    当与 table 一起使用时,如果列已经存在于 table 中,Declarative 将接受绑定到表的列作为属性。该列将被重新映射到给定键,方式与添加到 mapper()属性字典时相同。

postgresql

  • [postgresql]
    当遇到具有多个表达式的索引时,索引反射不会失败。
  • [postgresql]
    在 sqlalchemy.databases.postgres 中添加了 PGUuid 和 PGBit 类型。
    参考:#1327
  • [postgresql]
    当在域中指定未知 PG 类型时,未知 PG 类型的反射不会崩溃。
    参考:#1327

sqlite

  • [sqlite]
    修复了 SQLite 反射方法,以便检测到不存在的 cursor.description,触发自动关闭游标,这样在最近版本的 pysqlite 上调用 fetchone() 时不会因没有结果而失败,后者在没有行时会引发错误。

mssql

  • [mssql]
    对 pymssql 1.0.1 的初步支持
  • [mssql]
    修复了在 mssql 上未正确处理 max_identifier_length 的问题。

0.5.2

发布日期:2009 年 1 月 24 日 星期六

orm

  • [orm]
    进一步完善了 0.5.1 版本关于在多对多关系上放置  delete-orphan 级联的警告。首先,坏消息是:警告将适用于多对多关系和多对一关系。这是必要的,因为在这两种情况下,SQLA  在确定“孤儿”状态时不会扫描所有潜在的父对象集合 - 对于持久对象,它只会检测到一个在 Python  中的取消关联事件来确定对象是否为“孤儿”。接下来,好消息是:为了支持通过外键或关联表实现一对一,或者通过关联表支持一对多,可以设置一个新标志  single_parent=True,表示链接到关系的对象只能有一个父对象。如果在 Python 中发生多个父关联事件,关系将引发错误。
  • [orm]
    调整了从 0.5.1 版本开始的属性检测变化,完全为在超类已完全被检测后创建的子类建立属性检测。
    参考:#1292
  • [orm]
    修复了 delete-orphan 级联中的错误,即从两个不同的父类到相同目标类的两个一对一关系会过早地清除实例。
  • [orm]
    修复了一个急加载错误,即自引用急加载会阻止其他急加载(自引用或非自引用)正确地加入到父 JOIN 中。感谢 Alex K 创建了一个很好的测试用例。
  • [orm]
    session.expire() 和相关方法不会使未加载的延迟属性过期。这样可以防止在刷新实例时不必要地加载它们。
  • [orm]
    query.join()/outerjoin() 现在将正确地将一个 aliased() 构造加入到现有的左侧,即使已调用 query.from_self() 或 query.select_from(someselectable)。
    参考:#1293

sql

  • [sql]
    进一步修复了“列/表中的百分号和空格
    names” 功能。
    参考:#1284

mssql

  • [mssql]
    恢复了 convert_unicode 处理。结果被传递而没有转换。
    参考:#1291
  • [mssql]
    这次真的修复了十进制处理…
    参考:#1282
  • [mssql] [工单:1289]
    修改了表反射代码,只使用 kwargs 构建表。

orm

  • [orm]
    进一步改进了 0.5.1 版本关于在多对多关系上放置的  delete-orphan 级联的警告。首先,坏消息是:该警告将适用于多对多关系和多对一关系。这是必要的,因为在这两种情况下,SQLA  在确定“孤儿”状态时并不会扫描全部潜在的父对象集合 - 对于持久对象,它只会检测到一个在 Python  中的取消关联事件以确立对象为“孤儿”。接下来是好消息:为了支持通过外键或关联表进行一对一,或者通过关联表进行一对多,可以设置一个新的标志 single_parent=True,表示与关系相关联的对象只能有一个父对象。如果 Python 中发生多个父关联事件,则该关系将引发错误。
  • [orm]
    调整了从 0.5.1 版本开始的属性检测变更,以完全为在超类已经完全被检测后创建的子类建立属性检测。
    参考:#1292
  • [orm]
    修复了删除孤立级联中的错误,其中两个从两个不同的父类到相同目标类的一对一关系会过早地删除实例。
  • [orm]
    修复了一个贪婪加载 bug,即自我引用的贪婪加载将阻止其他贪婪加载(自我引用或非自我引用)正确地加入到父 JOIN 中。感谢 Alex K 创建了一个很好的测试用例。
  • [orm]
    session.expire() 和相关方法将不会过期未加载的延迟属性。这样在刷新实例时就不会被不必要地加载。
  • [orm]
    query.join()/outerjoin() 现在将正确地将一个 aliased() 构造加入到现有的左侧,即使已调用了 query.from_self()query.select_from(someselectable)
    参考:#1293

sql

  • [sql]
    进一步修复了在列/表中的百分号和空格。
    names” 功能。
    参考:#1284

mssql

  • [mssql]
    恢复了 convert_unicode 处理。结果将不会转换而被传递。
    参考:#1291
  • [mssql]
    这次真正修复了十进制处理问题。
    参考:#1282
  • [mssql] [Ticket:1289]
    修改了表反射代码,只使用 kwargs 构建表。


SqlAlchemy 2.0 中文文档(六十八)(4)https://developer.aliyun.com/article/1560743

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十九)(2)
SqlAlchemy 2.0 中文文档(六十九)
22 0
|
3月前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(七十六)(1)
SqlAlchemy 2.0 中文文档(七十六)
35 2
|
3月前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(七十六)(2)
SqlAlchemy 2.0 中文文档(七十六)
62 2
|
3月前
|
SQL JSON 数据格式
SqlAlchemy 2.0 中文文档(三十三)(1)
SqlAlchemy 2.0 中文文档(三十三)
20 0
|
3月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十八)(1)
SqlAlchemy 2.0 中文文档(六十八)
21 0
|
3月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十八)(2)
SqlAlchemy 2.0 中文文档(六十八)
22 0
|
3月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十八)(5)
SqlAlchemy 2.0 中文文档(六十八)
25 0
|
3月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十八)(4)
SqlAlchemy 2.0 中文文档(六十八)
30 0
|
3月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十九)(1)
SqlAlchemy 2.0 中文文档(六十九)
14 0
|
3月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(六十九)(3)
SqlAlchemy 2.0 中文文档(六十九)
17 0