Release: 1.4.25 | Release Date: September 22, 2021

SQLAlchemy 1.4 Documentation

0.4换热器

0.4.8

Released: Sun Oct 12 2008

orm

  • [orm]

    修正了“a=b”和“b=a”传递的继承条件导致错误的错误。

    References: #1039

  • [orm]

    对sessionextension.before中新集合、脏集合和已删除集合所做的更改将对该刷新生效。

  • [orm]

    向instructedAttribute添加了label()方法,以建立与0.5的远期兼容性。

sql

  • [sql]

    column.in(someselect)现在可以用作columns子句表达式,而子查询不会渗到from子句中。

    References: #1074

mysql

  • [mysql]

    添加了MSmediuminteger类型。

    References: #1146

sqlite

oracle

  • [oracle]

    已经将模式名考虑在内了

    References: #1155

  • [oracle]

    将b文件添加到反射类型列表中

    References: #1121

0.4.7p1

Released: Thu Jul 31 2008

orm

  • [orm]

    向作用域的会话方法添加了“add()”和“add_all()”。0.4.7的解决方法:

    from sqlalchemy.orm.scoping import ScopedSession, instrument
    setattr(ScopedSession, "add", instrument("add"))
    setattr(ScopedSession, "add_all", instrument("add_all"))

  • [orm]

    修复了relation()中set()和generator表达式的非2.3兼容用法。

0.4.7

Released: Sat Jul 26 2008

orm

  • [orm]

    当与many to many一起使用时,contains()运算符将别名()辅助(关联)表,以便多个contains()调用不会相互冲突。

    References: #1058

  • [orm]

    修复了阻止merge()与可比较的_属性()一起运行的错误。

  • [orm]

    relation()上的enable_typechecks=false设置现在只允许具有继承映射器的子类型。仍然不允许完全不相关的类型或未使用针对目标映射器的映射器继承设置的子类型。

  • [orm]

    添加的是“活动”标志,用于在事务正在进行时检测会话。对于“事务性”(在0.5非“自动提交”)会话,此标志始终为真。

    References: #976

sql

  • [sql]

    修复了调用select时的错误( [文字(Foo)] 或选择( [bindparam('foo')] )

schema

  • [schema]

    如果表名或架构名包含的字符多于该方言配置的字符限制,则create_all()、drop_all()、create()和drop()all会引发错误。有些数据库在使用过程中可以处理太长的表名,而sqla也可以处理这一点。但是在创建场景期间的各种反射/检查都失败了,因为我们正在数据库的目录表中查找名称。

    References: #571

  • [schema]

    当您在列上说“index=true”时生成的索引名将被截断为适合方言的长度。此外,不能使用index.drop()显式删除名称太长的索引,类似于。

    References: #571, #820

mysql

  • [mysql]

    向返回结果行的SQL关键字列表中添加了“call”。

oracle

  • [oracle]

    Oracle get_default_schema_name()“normalizes”返回之前的名称,这意味着当检测到标识符不区分大小写时,它会返回小写名称。

  • [oracle]

    在搜索现有表时,创建/删除表会考虑架构名称,这样其他所有者命名空间中同名的表就不会发生冲突。

    References: #709

  • [oracle]

    现在,光标上的“arraysize”默认设置为50,其值可通过使用“arraysize”参数以Oracle方言创建_engine()进行配置。这是为了说明cx_Oracle的默认设置“1”,它具有发送到Oracle的多次往返的效果。这实际上与BLOB/CLOB绑定的游标一起工作得很好,其中有任意数量的游标可用,但只适用于该行请求的生命周期(因此仍然需要bufferedcolumnrow,但不太需要)。

    References: #1062

  • [oracle]

    SQLite
    • 添加slfloat类型,它与sqlite实类型关联匹配。以前,只提供了满足数字相似性的slnumeric,但这与real不同。

misc

  • [postgres]

    已修复服务器指针以正确检测text()子句。

  • [postgres]

    添加了pgcidr类型。

    References: #1092

0.4.6

Released: Sat May 10 2008

orm

  • [orm]

    修复到recent relation()重构,该重构修复了本地表和远程表之间多次联接的、带有在联接之间共享的公共列的、奇异的、只显示视图的关系。

  • [orm]

    此外,还重新建立了跨多个表联接的VIEWONLY relation()配置。

  • [orm]

    添加了experimental relation()标志以帮助跨函数等进行primaryjoin,“本地”和“远程”对= [元组] . 这补充了一个复杂的PrimaryJoin条件,允许您提供包含关系的本地和远程端的单个列对。还改进了延迟加载SQL生成,以处理在函数和其他表达式中放置绑定参数的问题。(部分进展)

    References: #610

  • [orm]

    修复了单表继承,这样就可以从联接表继承映射器继承单表,而不会出现问题。

    References: #1036

  • [orm]

    修复了在发生子句自适应时,query.order_by()可能出现的“concatenate tuple”错误。

    References: #1027

  • [orm]

    删除了古老的断言,即映射的可选择项需要“别名”——如果不存在别名,映射器现在就创建自己的别名。尽管在这种情况下,您需要使用类,而不是映射的可选对象作为列属性的源,因此仍然会发出警告。

  • [orm]

    修复了涉及继承的“exists”函数(any(),has(),~contains());对于链接到子类的关系,完整的目标联接将呈现到exists子句中。

  • [orm]

    当存在扩展名并且只返回单个实体结果时,还原了主查询行的append_result()扩展方法的用法。

  • [orm]

    此外,还重新建立了跨多个表联接的VIEWONLY relation()配置。

  • [orm]

    删除了古老的断言,即映射的可选择项需要“别名”——如果不存在别名,映射器现在就创建自己的别名。尽管在这种情况下,您需要使用类,而不是映射的可选对象作为列属性的源,因此仍然会发出警告。

  • [orm]

    优化的映射器。_save_obj(),在刷新期间不必要地对标量值调用了_uu ne_uuuj()。

    References: #1015

  • [orm]

    添加了一个用于预加载的功能,在该功能中,将具有显式标签名称(不需要,btw)的子查询设置为column_property(),当实例是预连接的一部分时,将匿名标记,以防止与父对象上的子查询或同名列发生冲突。

    References: #1019

  • [orm]

    基于集合的集合=、-=、^=和&=对其操作数更严格,并且只对集合类型的集合、冻结集或子类进行操作。以前,他们会接受任何鸭子类型的套装。

  • [orm]

    添加了一个示例dynamic_dict/dynamic_dict.py,演示了将字典行为置于动态_加载器之上的简单方法。

sql

  • [sql]

    通过.collate(<collation>)表达式运算符和collate(<expr>,<collation>)SQL函数添加了collate支持。

  • [sql]

    修正了当应用于非表连接的select语句时带有union()的错误

  • [sql]

    改进了用作FROM子句(如select())时text()表达式的行为。select_from(text(“sometext”))

    References: #1014

  • [sql]

    column.copy()尊重“autoincrement”的值,修复了使用migrate的问题

    References: #1021

mssql

  • [mssql]

    在engine/dburi参数中添加了“odbc_autotranslate”参数。任何给定的字符串都将作为以下形式传递给ODBC连接字符串:

    “自动传输=%s”“%odbcu自动传输”

    References: #1005

  • [mssql]

    在engine/dburi参数中添加了“odbc_options”参数。给定的字符串只是附加到SQLAlchemy生成的ODBC连接字符串中。

    这将避免将来添加大量ODBC选项的需要。

firebird

  • [firebird]

    处理内置的“substring(:string-from:start for:length)”。

misc

  • [declarative] [extension]

    联接的表继承映射器使用稍微宽松的函数为父表创建“继承条件”,这样其他尚未声明的表对象的外键就不会触发错误。

  • [declarative] [extension]

    固定的可重入映射器编译挂起当声明的属性在foreignkey中使用时,即foreignkey(myotherclass.someattribute)

  • [engines]

    现在可以将pool listener作为callables字典或poollistener(可能是部分)duck类型提供,这是您的选择。

  • [engines]

    向池中添加了“rollback_returned”选项,该选项将禁用返回连接时发出的rollback()。此标志只能安全地用于不支持事务(即mysql/myisam)的数据库。

  • [ext]

    基于集合的关联代理=、-=、^=和&=对其操作数更严格,并且只对集合、冻结集或其他关联代理进行操作。以前,他们会接受任何鸭子类型的套装。

0.4.5

Released: Fri Apr 04 2008

orm

  • [orm]

    对session.merge()的行为有一个小的改变——根据主键属性检查现有对象,不一定是实例键。因此,广泛要求的能力是:

    x=myObject(id=1)x=sess.merge(x)

    如果数据库中存在ID 1的myObject,则将从数据库中加载该对象。merge()仍然将给定对象的状态复制到持久对象,因此像上面这样的示例通常会将“x”的所有属性中的“none”复制到持久副本中。这些可以使用session.expire(x)恢复。

  • [orm]

    还修复了merge()中存在于目标上但未从目标中删除合并集合的集合元素的行为。

  • [orm]

    对“未编译的映射器”添加了更积极的检查,这对声明性层尤其有帮助。

    References: #995

  • [orm]

    “primaryjoin”/“secondaryjoin”后面的方法已经被重构。行为应该稍微智能一点,主要是在错误消息方面,这些错误消息被减少到更可读的程度。在少数情况下,它可以比以前更好地解析正确的外键。

  • [orm]

    添加了comparable_property(),将query comparator行为添加到常规的非托管python属性中

  • [orm] ['machines'] [Company.employees.of_type(Engineer)]

    query.with_多态()的功能已作为配置选项添加到mapper()中。

    它通过多种形式设置:

    with_polymorphic=' [' with_polymorphic=[mappers] with_polymorphic=('] ,可选)具有多态性=( [映射器] 可选择的)

    这将控制继承映射器的默认多态加载策略。如果没有给定可选的,则会为所请求的继承映射器的所有联接表创建外部联接。注意,连接的自动创建与具体的表继承不兼容。

    mapper()上现有的select_table标志现在已被弃用,它与_多态性(“*”,select_table)同义。请注意,select_表的底层“guts”已被完全删除,并替换为更新的、更灵活的方法。

    新的方法还自动允许对子类(如果子类存在)执行预加载,例如:

    sess.query(Company).options(
     eagerload_all(
    ))

    加载公司对象、他们的员工以及碰巧是工程师的员工的“机器”集合。还应该尽快引入一个“with_多态性”查询选项,它允许对关系的with_多态性()进行每次查询控制。

  • [orm]

    在查询中添加了两个“实验性”特性,“实验性”是因为它们的具体名称/行为还没有刻在石头上:_values()和_from_self()。我们希望得到这些方面的反馈。

    • γ值 * columns)得到一个列表达式列表,并返回一个只返回这些列的新查询。计算时,返回值是一个元组列表,就像使用add_column()或add_entity()时一样,唯一的区别是“entity zero”(即映射类)不包含在结果中。这意味着在查询中使用group_by()和having()最终是有意义的,而这两个查询直到现在都是无用的。

      对该方法的未来更改可能包括它的连接、筛选和允许其他与“resultset”无关的选项的能力被删除,因此我们要寻找的反馈是人们希望如何使用_values()…即,在最后,还是人们希望在调用后继续生成。

    • _ from_self()编译查询的select语句(减去任何渴望加载程序),并返回从该select中选择的新查询。因此,基本上,您可以从查询中进行查询,而无需手动提取select语句。这给查询之类的操作赋予了意义。 [3:5] ..u来自_self().过滤器(一些标准)。这里没有太多争议,只是您可以快速创建效率较低的高度嵌套查询,并且我们希望对命名选择提供反馈。

  • [orm]

    query.order_by()和query.group_by()将接受多个参数,使用 * 参数(类似select()已经有了)。

  • [orm]

    向query添加了一些方便的描述符:query.statement返回完整的select构造query.whereclause只返回select构造的where部分。

  • [orm]

    固定/覆盖的情况下使用一个错误的/0值作为多态鉴别器。

  • [orm]

    修复了阻止同义词()属性与继承一起使用的错误

  • [orm]

    固定的SQL函数尾随下划线的截断

    References: #996

  • [orm]

    当挂起实例上的属性过期时,当触发“刷新”操作且未找到结果时,不会引发错误。

  • [orm]

    session.execute现在可以从元数据中找到绑定

  • [orm]

    已将“自引用”的定义调整为具有公共父级的任意两个映射器(这将影响与查询联接时是否需要别名=true)。

  • [orm]

    对query.join()的“from-joinpoint”参数进行了一些修正,这样,如果前一个join有别名,而这个join没有别名,那么join仍然会成功进行。

  • [orm]

    分类“级联删除”修复:
    • 修正了动态关系的“级联删除”操作,该操作只针对0.4.2中的外键置零行为而不是实际的级联删除。

    • 删除层叠而不删除孤立层叠在多对一上不会删除在会话之前与父级断开连接的孤立项。对父级调用了delete()(一对多已具有此项)。

    • 使用删除孤立项删除级联将删除孤立项,无论它是否仍附加到其同时删除的父项。

    • 使用继承时,在超类上存在的关系上正确检测到删除孤立级联。

    References: #895

  • [orm]

    使用select_from()时,通过查询中的计算固定顺序以正确别名映射器配置的顺序

  • [orm]

    重构将一个集合替换为另一个集合时开始使用的差异逻辑到collections.bulk_replace,对任何构建多级集合的人都很有用。

  • [orm]

    从递归到迭代的级联遍历算法,支持深对象图。

sql

  • [sql]

    模式限定表现在将在所有列表达式中以及在生成列标签时将模式名放在表名前面。这可以防止所有情况下的跨架构名称冲突

    References: #999

  • [sql]

    现在可以允许选择将所有From子句关联起来,而不从它们本身中关联。这些通常在标量上下文中使用,即从表中选择x(选择x,其中y)。需要显式correlate()调用。

  • [sql]

    “name”不再是column()所需的构造函数参数。它(和.key)现在可以延迟到将列添加到表中。

  • [sql]

    like(),ilike(),contains(),startswith(),endswith()接受一个可选的关键字参数“escape=<somestring>”,它使用语法“x like y escape'<somestring>”,设置为转义符。

    References: #791, #993

  • [sql]

    random()现在是一个通用的SQL函数,将编译为数据库的随机实现(如果有的话)。

  • [sql]

    update().values()和insert().values()接受关键字参数。

  • [sql]

    修正了select()中关于生成from子句的问题,在极少数情况下,当一个子句打算取消另一个子句时,可能会生成两个子句。有些ORM查询具有大量的热切负载,可能已经看到了这种症状。

  • [sql]

    case()函数现在还将字典作为whens参数。它还将“then”表达式解释为默认值,即case( [(x==y, "foo")] )将“foo”解释为绑定值,而不是SQL表达式。在本例中,将文本(expr)用于文本SQL表达式。对于条件本身,只有当存在“value”关键字时,这些字符串才是文本字符串,否则sa将强制显式使用text()或literal()。

mysql

  • [mysql]

    方言用于缓存服务器设置的connection.info键已更改,现在已命名为命名空间。

mssql

  • [mssql]

    反射表现在将自动加载其他表,这些表由自动加载表中的外键引用。

    References: #979

  • [mssql]

    添加了ExecuteMany检查以跳过标识获取。

    References: #916

  • [mssql]

    为小日期类型添加了存根。

    References: #884

  • [mssql]

    为pyodbc方言添加了新的“driver”关键字参数。将替换为ODBC连接字符串(如果给定),默认为“SQL Server”。

  • [mssql]

    为pyodbc方言添加了一个新的“max_identifier_length”关键字参数。

  • [mssql]

    pyodbc+unix的改进。如果之前无法使用该组合,请重试。

oracle

  • [oracle]

    表上的“owner”关键字现在已被弃用,它与“schema”关键字完全同义。表现在可以用替代的“owner”属性来反映,这些属性在表对象上显式地声明,或者不使用“schema”。

  • [oracle]

    除非在表对象上指定“Oracle解析同义词=真”,否则默认情况下禁用表反射期间搜索同义词、dblinks等的所有“magic”。解析同义词必然会导致一些混乱的猜测,我们宁愿在默认情况下忽略掉这些猜测。设置标志后,在所有情况下,表和相关表都将根据同义词进行解析,这意味着如果某个表存在同义词,则反射将在反射相关表时使用该同义词。这是比以前更为棘手的行为,这就是默认情况下关闭它的原因。

misc

  • [declarative] [extension]

    “symonym”函数现在可以直接与“declarative”一起使用。使用“descriptor”关键字参数传入修饰属性,例如:somekey=synonym(“somekey”,descriptor=property(g,s))。

  • [declarative] [extension]

    “deferred”函数可与“declarative”一起使用。最简单的用法是一起声明deferred和column,例如:data=deferred(column(text))。

  • [declarative] [extension]

    declarative还获得了@symonym_for(…)和@comparable_using(…),前端用于symonym和comparable_属性。

  • [declarative] [extension]

    使用声明性时对映射器编译的改进;已编译的映射器在使用时仍将触发其他未编译映射器的编译

    References: #995

  • [declarative] [extension]

    声明性将完成对缺少名称的列的设置,允许使用更枯燥的语法。

    foo类(基础):

    __tablename__ ='foos'id=列(整数,主键=真)

  • [declarative] [extension]

    向发送“inherits=none”时,可以禁用声明性继承 __mapper_args__.

  • [declarative] [extension]

    声明性_base()接受可选的kwarg“mapper”,它是生成映射器的任何可调用/class/方法,例如声明性_base(mapper=scopedsession.mapper)。也可以使用“uu mapper”属性在各个声明性类上设置此属性。

  • [postgres]

    使pg服务器端的游标恢复原状,添加了固定单元测试作为默认测试套件的一部分。为光标ID添加了更好的唯一性

    References: #1001

0.4.4

Released: Wed Mar 12 2008

orm

  • [orm]

    any(),has(),contains(),~contains(),attribute level==和!=现在可以正确地处理自引用关系-exists中的子句在“remote”端加了别名,以将其与父表区分开来。这适用于单表自引用和基于继承的自引用。

  • [orm]

    已修复的行为==和!=relation()级别的运算符,与一对一关系的空值进行比较时

    References: #985

  • [orm]

    修正了session.expire()属性没有加载到由select_表映射器映射的多态映射实例上的错误。

  • [orm]

    added query.with_多态()-指定从基类派生的类列表,这些类将添加到查询的FROM子句中。允许在filter()条件中使用子类,同时还可以急切地加载这些子类的属性。

  • [orm]

    您的叫喊已被听到:使用delete-orphan从属性或集合中删除挂起的项将从会话中删除该项;不会引发flusherror。请注意,如果您显式地session.save()处理了挂起的项,那么属性/集合移除仍然会将其取消。

  • [orm]

    session.refresh()和session.expire()在调用会话中不持久的实例时引发错误

  • [orm]

    修复了使用join()生成多个查询对象时可能出现的生成错误。

  • [orm]

    修正了0.4.3中引入的错误,即当使用默认的“select”多态性获取时,加载一个已经持久的、映射有联接表继承的实例将从其联接表触发一个无用的“secondary”加载。这是由于属性在第一次加载期间被标记为过期,并且没有从以前的“辅助”加载中被取消标记。基于中的存在,属性现在未过期 __dict__ 在任何加载或提交操作成功之后。

  • [orm]

    不推荐使用的查询方法Apply_sum()、Apply_max()、Apply_min()、Apply_avg()。更好的方法正在出现……

  • [orm]

    relation()无法接受其第一个参数的可调用,该参数将返回相关的类。这有助于声明性包在没有类的情况下定义关系。

  • [orm]

    添加了一个新的名为“of_type()”的“higher level”运算符:用于join()以及any()和has(),限定将在筛选条件中使用的子类,例如:

    query.filter(公司、员工、类型为“工程师”)。

    任意(engineer.name='foo'))

    query.join(类型为“工程师”)的公司、员工)。

    筛选器(engineer.name='foo')

  • [orm]

    针对flush()中可能丢失的引用错误的预防代码。

  • [orm]

    在filter()、filter_by()和其他表达式中使用的表达式,当它们使用由使用子对象标识(例如filter(parent.child=<somechild>)的关系生成的子句时,在执行时计算实际的主键值<somechild>,以便完成查询的自动刷新步骤,从而填充pk值。在<somechild>悬而未决的情况下。

  • [orm]

    将relation()-level order by设置为many to many“secondary”表中的一列,现在可以进行预先加载,以前的“order by”不是对secondary表别名的别名。

  • [orm]

    位于现有描述符之上的同义词现在是这些描述符的完整代理。

sql

  • [sql]

    可以针对从句的文本再次创建selects的别名。

    References: #975

  • [sql]

    bindparam()的值可以是可调用的,在这种情况下,它是在语句执行时计算得到该值的。

  • [sql]

    为结果集提取添加了异常包装/重新连接支持。Reconnect适用于在结果期间引发可捕获数据错误的数据库(即不适用于MySQL)

    References: #978

  • [sql]

    通过engine.begin two phase(),engine.prepare()为“threadlocal”引擎实现了两阶段API

    References: #936

  • [sql]

    修复了阻止联盟可克隆的错误。

    References: #986

  • [sql]

    向insert()、update()、delete()和ddl()添加了“bind”关键字参数。.bind属性现在可以在这些语句以及select()上赋值。

  • [sql]

    insert语句现在可以在insert和into之间使用额外的“prefix”字进行编译,对于像mysql的insert ignore into表这样的供应商扩展。

extensions

  • [extensions]

    已经添加了一个新的超小型“声明性”扩展,它允许表和映射器()配置在类声明的下面进行内联。此扩展与ActiveMapper和Elixir的不同之处在于,它根本不重新定义任何SQLAlchemy语义;文本列、表和relation()构造用于定义类行为和表定义。

misc

  • [dialects]

    无效的sqlite连接URL现在引发错误。

  • [dialects]

    Postgres时间戳正确呈现

    References: #981

  • [dialects]

    Postgres PGarray默认为“可变”类型;与ORM一起使用时,使用可变样式等同性/写时复制技术来测试更改。

0.4.3

Released: Thu Feb 14 2008

general

  • [general]

    由于对在2.3上运行完整测试套件的新支持,修复了Python2.3的各种隐藏和一些不那么隐藏的兼容性问题。

  • [general]

    警告现在作为类型异常发出。sawarning。

orm

  • [orm]

    现在,每个session.begin()都必须伴随相应的commit()或rollback(),除非该会话使用session.close()关闭。这还包括begin(),它隐式地表示使用transactional=true创建的会话。这里引入的最大变化是,当使用transactional=true创建的会话在flush()期间引发异常时,必须调用session.rollback()或session.close(),以便该会话在异常之后继续。

  • [orm]

    修正了将临时实体与backref'ed集合合并时出现的集合加倍错误。

    References: #961

  • [orm]

    合并(不加载=真)不接受瞬时实体,这是合并(不加载=真)也不接受任何“脏”对象的延续。

  • [orm]

    添加了由作用域会话生成的独立“查询”类属性。这将在不使用session.mapper的情况下提供myclass.query。使用:

    myClass.query=session.query_property()。

  • [orm]

    尝试访问不存在会话的过期实例属性时引发正确的错误消息。

  • [orm]

    dynamic_loader()/lazy=“dynamic”现在以与relation()相同的方式接受和使用order_by参数。

  • [orm]

    已将expire_all()方法添加到会话。对所有持久实例调用expire()。这与…

  • [orm]

    已部分或完全过期的实例将在影响这些对象的常规查询操作期间填充其过期属性,从而防止为每个实例生成不必要的第二个SQL语句。

  • [orm]

    动态关系在引用时,创建对父对象的强引用,以便查询仍然有一个要调用的父对象,即使父对象仅在单个表达式的范围内创建(或取消引用)。

    References: #938

  • [orm]

    添加了一个mapper()标志“热切的默认值”。当设置为true时,在插入或更新操作期间生成的默认值将立即进行后提取,而不是延迟到稍后。这模仿了旧的0.3行为。

  • [orm]

    query.join()现在可以接受类映射属性作为参数。这些可以就地使用,也可以与字符串组合使用。特别是,这允许在多态关系上构造到子类的连接,即:

    查询(公司).join( [“员工”,工程师姓名] )

  • [orm] [('employees'] [Engineer.name] [people.join(engineer))]

    query.join()还可以接受属性名为/some selectable的元组作为参数。这允许构造连接 from 多态关系的子类,即:

    查询(公司)。join(

  • [orm]

    结合多态映射器对join()行为的一般改进,即从多态映射器连接到多态映射器并正确应用别名。

  • [orm]

    固定/改进的行为当映射器确定映射联接的自然“主键”时,它将更有效地减少通过外键关系等效的列。这会影响需要发送到query.get()的参数的数量。

    References: #933

  • [orm]

    惰性加载程序现在可以处理一个连接条件,其中“绑定”列(即,获取作为绑定参数发送的父ID的列)在连接条件中出现多次。具体来说,这允许relation()的公共任务,该任务包含父级相关子查询,例如“仅选择最新的子项”。

    References: #946

  • [orm]

    修复了多态继承中的错误,在继承映射器的本地可选列中,当列上的基多态不对应于多个级别深的任何列时,会引发不正确的异常。

  • [orm]

    修复了多态继承中的错误,这使得在多态映射器上设置工作“顺序”变得困难。

  • [orm]

    修复了一个相当昂贵的查询调用,它减慢了多态查询的速度。

  • [orm]

    如果需要,现在可以在flush()调用期间加载“被动默认值”和其他“内联”默认值;特别是,这允许构造relations(),其中外键列引用服务器端生成的非主键列。

    References: #954

  • [orm]

    其他会话事务修复/更改:
    • 修复了会话事务管理的错误:向嵌套事务添加连接时,未在连接上启动父事务。

    • session.transaction现在总是引用最内部的活动事务,即使在直接对session transaction对象调用commit/rollback时也是如此。

    • 现在可以准备两阶段的事务。

    • 在一个连接上准备两阶段事务失败时,所有连接都将回滚。

    • 使用嵌套事务时,session.close()没有关闭所有事务。

    • rollback()以前错误地将当前事务直接设置为可以回滚到的事务的父级。现在它向上回滚可以处理它的下一个事务,但将当前事务设置为其父事务,并取消激活其间的事务。非活动事务只能回滚或关闭,任何其他调用都会导致错误。

    • commit()的autoflush没有为简单的子事务刷新。

    • 当会话不在事务中并且提交事务失败时,UnitOfWork Flush没有关闭失败的事务。

  • [orm]

    其他票据:

    References: #940, #964

sql

  • [sql]

    添加了“schema.ddl”,一个可执行的自由格式ddl语句。DDL可以单独执行,也可以附加到表或元数据实例,并在创建和/或删除这些对象时自动执行。

  • [sql]

    可以使用“useexisting=true”标志在现有表(如已反映的表)上重写表列和约束,该标志现在考虑了与之一起传递的参数。

  • [sql]

    添加了一个基于可调用的DDL事件接口,在表和元数据创建和删除前后添加挂钩。

  • [sql]

    在delete()和update()结构中添加了generative where(<criteria>)方法,该方法返回一个新对象,条件通过和连接到现有条件,就像select().where()。

  • [sql]

    向列操作添加了“ilike()”运算符。编译为ilike on postgres,lower(x)like lower(y)on all others。

    References: #727

  • [sql]

    添加了“now()”作为通用函数;在sqlite上,Oracle和MSSQL编译为“current_timestamp”;在所有其他函数上编译为“now()”。

    References: #943

  • [sql]

    startswith()、endswith()和contains()运算符现在将通配符运算符与SQL中给定的操作数连接起来,即“'%'<bindparam>”,在所有情况下,正确接受文本(“something”)操作数。

    References: #962

  • [sql]

    cast()正确接受文本(“something”)和其他非文本操作数

    References: #962

  • [sql]

    修复了结果代理中的错误,匿名生成的列标签不能使用其直字符串名称访问。

  • [sql]

    现在可以定义可推迟的约束。

  • [sql]

    在select()和text()中添加了“autocommit=true”关键字参数,并在select()上添加了generative autocommit()方法;对于通过用户定义的方法(而不是通常的插入/更新/删除等)修改数据库的语句,此标志将在执行期间启用“autocommit”行为(如果没有进行任何事务)。

    References: #915

  • [sql]

    selectable的“.c.”属性现在为其columns子句中的每个列表达式获取一个条目。以前,像函数和case语句这样的“未命名”列没有放到那里。现在,如果没有可用的“名称”,它们将使用它们的完整字符串表示。

  • [sql]

    compositeselect,即any union()、union_all()、intersect()等,现在断言每个可选选项包含相同数量的列。这符合相应的SQL要求。

  • [sql]

    为其他未标记的函数和表达式生成的匿名“label”现在在编译时向外传播给类似select的表达式。( [选择([func.foo())] ))。

  • [sql]

    基于上述思想,compositeselects现在基于第一个selectable中的名称构建自己的“.c.”集合;相应的_column()现在完全适用于所有嵌入的selectable。

  • [sql]

    Oracle和其他公司对用于序列等默认值的SQL进行了正确编码,即使没有使用Unicode标识,因为标识符准备程序可能返回缓存的Unicode标识符。

  • [sql]

    列和子句与表达式左侧的datetime对象的比较现在有效(d<table.c.col)。(rhs上的日期时间总是有效的,lhs异常是datetime实现的一个怪癖。)

misc

  • [dialects]

    更好地支持sqlite中的模式(通过附加数据库链接…作为名字)。在过去的某些情况下,从为sqlite生成的SQL中省略了模式名。情况不再是这样了。

  • [dialects]

    sqlite上的表名现在也可以使用临时表。

  • [dialects]

    在反射操作期间自动检测未指定的mysql ansi_引号模式,支持更改模式中游。如果不使用反射,仍然需要手动模式设置。

  • [dialects]

    固定时间列在sqlite上的反射。

  • [dialects]

    最后将pgmacaddr类型添加到postgres

    References: #580

  • [dialects]

    反映与firebird下的pk字段(通常具有插入前触发器)关联的序列

  • [dialects]

    Oracle在生成限制/偏移量子查询时在结果集列映射中组装正确的列,允许列正确映射到结果集,即使长名称截断开始。

    References: #941

  • [dialects]

    mssql现在在_is_select regexp中包含exec,它应该允许使用返回存储过程的行。

  • [dialects]

    MSSQL现在包含了一个使用ansi sql row_number()函数的限制/偏移的实验性实现,因此它需要mssql-2005或更高版本。要启用该功能,请将“has_window_funcs”添加到connect或add的关键字参数中?在dburi查询参数中有“window”和“funcs=1”。

  • [ext]

    已将ext.activemapper更改为对对象存储区使用非事务性会话。

  • [ext]

    固定输出顺序 ['a'] +obj.proxied“关联代理列表上的二进制操作。

0.4.2p3

Released: Wed Jan 09 2008

general

  • [general]

    子版本编号方案更改为套件设置工具版本号规则;轻松安装-u现在应该获得超过0.4.2的版本。

orm

  • [orm]

    修正了使用“可变标量”(如pickletypes)时session.dirty的错误。

  • [orm]

    在主要或次要联接条件中具有非本地映射列的relation()上刷新时添加了更具描述性的错误消息。

  • [orm]

    抑制 all InstanceState中有错误。uu cleanup()现在。

  • [orm]

    修复了一个属性历史错误,通过该错误,将新集合分配给已具有挂起更改的基于集合的属性将生成错误的历史记录。

    References: #922

  • [orm]

    修复了删除孤立级联错误,通过该错误,将同一对象两次设置为标量属性可以将其记录为孤立对象

    References: #925

  • [orm]

    固定了对基于列表的关系的+=赋值的级联。

  • [orm]

    现在可以针对尚不存在的属性创建同义词,这些属性稍后通过add_property()添加。这通常包括backrefs。(也就是说,您可以将backrefs作为同义词,而不必担心操作顺序)

    References: #919

  • [orm]

    修复了多态“联合”映射器可能出现的错误,该映射器返回到继承表的“延迟”加载。

  • [orm]

    映射器/映射类(即“c”)上的“columns”集合是针对映射表的,而不是针对多态“union”加载时的select_表(这不应该是明显的)。

  • [orm]

    修复了相当严重的错误,在UnitOfWork.New集合中可以多次列出同一个实例;当使用继承映射器和ScopedSession.Mapper的组合作为多个 __init__ 每个实例调用可以保存()具有不同状态对象的对象

  • [orm]

    向查询添加了非常基本的生成迭代器行为。调用query.yield per(<number of rows>)并在迭代上下文中评估查询;将打包并生成n行的每个集合。使用此方法时要格外小心,因为它不会尝试协调跨越结果批边界的热切加载的集合,也不会在多个批中出现相同的实例时表现良好。这意味着,如果在多个批中引用了一个热切加载的集合,那么它将被清除,并且在所有情况下,在多个批中发生的实例上的属性都将被覆盖。

  • [orm]

    固定集合集合和关联代理集的就地集突变运算符。

    References: #920

sql

  • [sql]

    文本类型现在已正确导出,并且不会在DDL创建时引发警告;没有长度的字符串类型只在创建表时引发警告

    References: #912

  • [sql]

    将添加新的单码文本类型,以指定已编码、未长度化的文本类型。

  • [sql]

    修正了union()中的错误,这样就可以联合不从fromClause对象派生的select()语句

  • [sql]

    将文本名称更改为文本,因为它是“通用”类型;文本名称在0.5之前已被弃用。在0.5之前,还不赞成在不存在长度的情况下将字符串“升级”为文本的行为;在用于创建表语句时,将发出警告(出于SQL表达式目的,没有长度的字符串仍然可以)

    References: #912

  • [sql]

    generative select.order_by(none)/group_by(none)未成功重置order by/group by条件,固定

    References: #924

misc

  • [dialects]

    修复了mysql空字符串列默认值的反射。

  • [ext]

    “+” *', '+=' and '* ='支持关联代理列表。

  • [dialects]

    mssql-缩小了msdate/msdatetime子类中“date”/“datetime”的测试范围,以便传入的“datetime”对象不会被错误地解释为“date”对象,反之亦然。

    References: #923

  • [dialects]

    修复了对pgraray类型的子类型结果处理器的缺失调用。

    References: #913

0.4.2

Released: Wed Jan 02 2008

orm

  • [orm]

    对基于集合的backrefs的主要行为更改:它们不再触发延迟加载!”Reverse“添加和删除将排队,并在实际读取和加载集合时与集合合并;但不要预先触发加载。对于注意到这种行为的用户,在某些情况下,这应该比使用动态关系更方便;对于没有注意到这种行为的用户,在某些情况下,您可能会注意到您的应用程序使用的查询比以前少得多。

    References: #871

  • [orm]

    添加了可变主键支持。主键列可以自由更改,实例的标识将在刷新时更改。此外,通过设置“被动级联=假”标志,支持与数据库的on update cascade(对于db's like postgres来说是必需的)或直接由ORM以update语句的形式发布的外键引用(主键或不主键)沿关系的更新级联。

  • [orm]

    继承映射器现在直接继承其父映射器的MapperExtension,以便为子类调用特定MapperExtension的所有方法。一如既往,任何mapperExtension都可以返回ext_continue to continue extension processing或ext_stop to stop processing。映射器解析的顺序是:<extensions declared on the classes mapper><extensions declared on the classes'parent mapper><globally declared extensions>。

    请注意,如果您分别实例化同一扩展类,然后将其分别应用于同一继承链中的两个映射器,则该扩展将应用于继承类两次,并且每个方法将被调用两次。

    要将映射器扩展显式应用于每个继承类,但每个操作只调用一次每个方法,请为两个映射器使用相同的扩展实例。

    References: #490

  • [orm]

    mapperExtension.before_update()和after_update()现在对称地调用;以前,没有修改过的列属性(但有relation()修改)的实例可以用before_update()调用,但不能在_update()之后调用。

    References: #907

  • [orm]

    查询的select语句中缺少的列现在在加载期间自动延迟。

  • [orm]

    扩展“object”且不提供uuu init_uu()方法的映射类现在将在非空时引发typeerror * ARGS或 * *Kwargs存在于实例构建时(并且不会被任何扩展(如scoped_会话映射器)消耗),与普通Python类的行为一致。

    References: #908

  • [orm]

    修正了当filter_by()将关系与none进行比较时的查询错误

    References: #899

  • [orm]

    改进了对映射实体的酸洗支持。每个实例的lazy/deferred/expired可调用文件现在都是可序列化的,因此它们可以用状态进行序列化和反序列化。

  • [orm]

    新的symonym()行为:在所有情况下,如果映射的类中还没有属性,则会在该类上放置一个属性。如果类上已存在某个属性,同义词将使用适当的比较运算符修饰该属性,以便在列表达式中使用它,就像在任何其他映射属性(即在filter()中可用)中一样,“proxy=true”标志将被弃用,不再表示任何内容。此外,标记“map_column=true”将自动生成与同义词名称对应的columnproperty,即:“somename”:同义词(“somename”,map_column=true)将名为“somename”的列映射到属性“somename”。请参见映射器文档中的示例。

    References: #801

  • [orm]

    query.select_From()现在用给定的参数替换所有现有的From条件;前面构造From子句列表的行为通常不有用,因为创建联接条件需要filter()调用,filter()中引入的新表已经将它们自己添加到From子句中。新的行为不仅允许从主表进行联接,还允许使用SELECT语句。对于给定的语句,筛选条件、ORDER BYS和EAGER LOAD子句将被“别名”。

  • [orm]

    本月的属性规范重构改变了我们从0.3到0.3的“加载时复制”行为,在大多数情况下都是“修改时复制”。这会占用相当大的延迟,使加载操作无法进行,而且总体而言,只有实际修改的属性才能复制其“提交状态”。只有“可变标量”属性(即pickled对象或其他可变项)、加载时复制更改的原因首先保留旧行为。

  • [orm] [attrname]

    属性的一个轻微的行为变化是,属性的定义是 not 使该属性的Lazyloader再次触发;“del”使该属性的有效值为“none”。要重新触发属性的“加载器”,请使用session.expire(instance,)。

  • [orm]

    query.filter(someClass.someChild==none),将多对一属性与none进行比较时,正确生成“id is null”,包括null在右侧。

  • [orm]

    query.order_by()考虑了别名联接,即query.join(“orders”,aliased=true)。order_by(order.id)

  • [orm]

    chengLoad()、lazyload()、chengLoad_all()采用可选的第二个类或mapper参数,该参数将选择要应用该选项的mapper。这可以在使用add_entity()添加的其他映射器中进行选择。

  • [orm]

    通过add_entity()添加的映射器可以进行热切加载。

  • [orm]

    将“级联删除”行为添加到“动态”关系中,就像常规关系一样。如果未设置被动删除标志(也只是添加),则父项的删除将触发子项的完全加载,以便可以相应地删除或更新子项。

  • [orm]

    另外,使用动态的、实现了正确的count()行为以及其他助手方法。

  • [orm]

    修复多态关系上的级联,使从对象到多态集合的级联继续沿着集合中每个元素的特定属性集进行级联。

  • [orm]

    query.get()和query.load()不考虑现有的过滤器或其他条件;这些方法 总是 在数据库中查找给定的ID或从标识映射中返回当前实例,而忽略任何现有的筛选、联接、分组依据或已配置的其他条件。

    References: #893

  • [orm]

    在继承映射器的同时增加了对版本“id”列的支持。版本号通常设置在继承关系中的基本映射器上,在该关系中,它对所有继承映射器都生效。

    References: #883

  • [orm]

    对具有标签的column_property()表达式放宽了规则;现在可以接受任何columnElement,因为编译器现在自动为无标签的columnElements添加标签。可选语句(如select()语句)仍然需要通过as_scalar()或label()转换为columnElement。

  • [orm]

    修复了backref错误,如果attr为none,则无法删除instance.attr。

  • [orm]

    几个ORM属性已被删除或私有:mapper.get_attr_by_column(),mapper.set_attr_by_column(),mapper.pks_by_table,mapper.cascade_callable(),mapperproperty.cascade_callable(),mapper.canload(),mapper.save_obj(),mapper.delete_obj(),mapper.mapper_registry,attributes.attributeManager

  • [orm]

    将不兼容的集合类型分配给relation属性现在将引发typeerror,而不是sqlAlchemy的argumentError。

  • [orm]

    如果传入字典中的键与集合的keyfunc将用于该值的键不匹配,则对mappedCollection的大容量分配现在会引发错误。

    References: #886

  • [orm] [newval1] [newval2]

    自定义集合现在可以指定@converter方法将“批量”分配中使用的对象转换为值流,如::

    obj.col =
    # or
    obj.dictcol = {'foo': newval1, 'bar': newval2}

    mappedCollection使用这个钩子来确保从集合的角度来看传入的键/值对是健全的。

  • [orm]

    修复了在双向关系的两侧使用lazy=“dynamic”时出现的无限循环问题

    References: #872

  • [orm]

    在本例中,当根据select语句映射时,对使用query+hegoloads应用的限制/偏移混叠进行了更多修复

    References: #904

  • [orm]

    修复为自引用的热切加载,这样,如果相同的映射实例出现在同一结果集中的两个或多个不同的列集中,则不管所有行是否包含该集合的一组“热切”列,都将填充其热切加载的集合。当获取已打开“连接深度”的结果时,这也将显示为一个键错误。

  • [orm]

    修复了当使用limit与继承映射器结合使用时,查询不会将子查询应用于SQL的错误,因为该继承映射器中的热切加载程序仅位于父映射器中。

  • [orm]

    澄清了当您尝试使用与会话中已存在的实例相同的标识密钥更新实例()时出现的错误消息。

  • [orm]

    一些要合并的澄清和修复(例如,不加载=真)。修复了在返回的实例上禁用惰性加载程序的错误。另外,我们目前不支持合并一个在其上有未提交更改的实例,如果使用了“不加载=真…”,这将导致一个错误。这是因为在合并给定实例的“提交状态”以正确对应于新复制的实例以及其他修改状态时很复杂。由于dont_load=true的用例正在缓存,因此给定的实例无论如何都不应该有任何未提交的更改。我们现在还复制实例而不使用任何事件,以便新会话上的“脏”列表不受影响。

  • [orm]

    修复了在使用session.begin嵌套()和多个级别的封闭session.begin()语句时可能出现的错误。

  • [orm]

    已修复具有自定义实体名称的实例的session.refresh()。

    References: #914

sql

  • [sql]

    通用函数!我们引入一个已知SQL函数的数据库,例如当前时间戳、合并,并创建表示它们的显式函数对象。这些对象具有约束的参数列表,具有类型意识,并且可以以特定于方言的方式编译。所以说func.char_length(“foo”,“bar”)会引发错误(参数太多),func.coalesce(datetime.date(2007,10,5),datetime.date(2005,10,15))知道其返回类型是日期。到目前为止,我们只有几个函数可以表示,但将继续添加到系统中

    References: #615

  • [sql]

    自动重新连接支持得到了改进;在基础连接失效后,连接现在可以自动重新连接,而无需从引擎再次连接()。这允许绑定到单个连接的ORM会话不需要重新连接。在基础连接无效后,必须回滚连接上打开的事务,否则将引发错误。还修复了Cursor()、Rollback()或Commit()未调用Disconnect Detect的错误。

  • [sql]

    向字符串添加新标志并创建_engine(),断言_unicode=(true |False| “警告”一点也没有。默认为 FalseNone 在创建引擎()和字符串时, 'warn' 在Unicode类型上。什么时候? True ,导致所有Unicode转换操作在将非Unicode字节串作为绑定参数传递时引发异常。'warn'会导致警告。强烈建议所有支持Unicode的应用程序正确使用python unicode对象(即u'hello'而不是'hello'),以便数据准确地往返。

  • [sql]

    “唯一”绑定参数的生成被简化为使用与其他所有方法相同的“唯一标识符”机制。这不会影响用户代码,除了针对生成的名称硬编码的任何代码。生成的绑定参数现在具有形式“<paramname>”,而之前只有相同名称的第二个绑定具有此形式。

  • [sql]

    select()。如果select的columns子句中没有恰好一个表达式,as_scalar()将引发异常。

  • [sql]

    bindparam()对象本身可以用作execute()的键,即statement.execute(bind1:'foo',bind2:'bar')

  • [sql]

    向typecorator、process_bind_param()和process_result_value()添加了新方法,这将自动利用底层类型的处理。适用于unicode或pickletype。typedecorator现在应该是增强任何现有类型(包括其他typedecorator子类,如pickleType)行为的主要方法。

  • [sql]

    当导出列集合中的两列基于名称发生冲突时,可选择项(和其他项)将发出警告。

  • [sql]

    带有模式的表仍然可以在sqlite、firebird中使用,模式名称将被删除。

    References: #890

  • [sql]

    更改了各种“literal”生成函数以使用匿名绑定参数。除了它们的标签现在看起来像“:param_1”,“:param_2”而不是“:literal”,这里没有太多变化。

  • [sql]

    现在支持“tablename.columname”形式的列标签,即带点的标签。

  • [sql]

    从关键字参数到select()可以是标量或列表。

firebird

  • [firebird] [backend]

    是否正确反映域(部分修复)和被动默认值

    References: #410

  • [firebird] [3562] [backend]

    恢复为使用默认池类(出于测试目的,在0.4.0中设置为singletonthreadpool)

  • [firebird] [backend]

    将func.length()映射到“char_length”(在FireBird的旧版本中,很容易被udf“strlen”覆盖)

misc

  • [dialects]

    sqlite sldate类型不会错误地呈现日期时间或时间对象的“微秒”部分。

  • [dialects]

    神谕
    • 增加了对Oracle的断开连接检测支持

    • 对二进制/原始类型进行一些清理,以便在特殊的基础上检测到cx_oracle.lob

    References: #902

  • [dialects]

    MSSQL
    • pyodbc不再具有全局“set nocount on”。

    • 修复自动加载上的非标识整数pks

    • 更好地支持转换unicode

    • pyodbc/adodbapi的日期转换不太严格

    • 架构限定表/自动加载

    References: #824, #839, #842, #901

0.4.1

Released: Sun Nov 18 2007

orm

  • [orm]

    应用了限制/偏移量的抢先加载不再将联接到其自身有限子查询的主表添加;抢先加载现在直接联接到子查询,该子查询还向结果集提供主表的列。这将从所有具有限制/偏移的预加载中消除联接。

    References: #843

  • [orm]

    session.refresh()和session.expire()现在支持附加参数“attribute_name”,即要刷新或过期的单个属性keynames列表,允许在已加载的实例上部分重新加载属性。

    References: #802

  • [orm]

    已将op()运算符添加到插入指令的属性中;即user.name.op(“ilike”)(somename%)

    References: #767

  • [orm]

    映射类现在可以定义 __eq__, __hash__, 和 __nonzero__ 具有任意语义的方法。ORM现在只在标识的基础上处理所有映射的实例。(例如,“is”与“==”)

    References: #676

  • [orm]

    mapper上的“properties”访问器被删除;它现在抛出一个信息性异常,解释mapper.get_property()和mapper.iterate_properties的用法。

  • [orm]

    向查询添加了having()方法,将having应用于生成的语句,方法与filter()附加到where子句的方法相同。

  • [orm]

    query.options()的行为现在完全基于路径,也就是说,一个选项,如chengload_all(‘x.y.z.y.x’)将只对那些路径应用chengloading,即,而不是‘x.y.x’;chengload(‘children.children’)只适用于两个级别的深度,等等。

    References: #777

  • [orm]

    pickletype将使用 == 当设置为mutable=false时,而不是 is 操作员。使用 is 或者任何其他比较器,使用pickleType(比较器=我的自定义比较器)发送一个定制的比较函数。

  • [orm]

    如果同时使用distinct()和包含一元表达式(或其他)的order_by(),则查询不会引发错误。

    References: #848

  • [orm]

    使用distinct()时,来自联接表的order_by()表达式将正确添加到columns子句中。

    References: #786

  • [orm]

    修复了query.add_column()不接受类绑定属性作为参数的错误;如果向add_column()发送了无效参数,则query也会引发错误(在instances()时)

    References: #858

  • [orm]

    在InstanceState中添加了更多检查垃圾收集取消引用的功能。uu cleanup()以减少应用程序关闭时的“gc忽略”错误。

  • [orm]

    会话API已固化:

  • [orm]

    session.save()是一个已经持久化的对象,这是一个错误。

    References: #840

  • [orm]

    session.delete()是一个错误的对象, not 持久的。

  • [orm]

    session.update()和session.delete()在更新或删除具有不同标识的会话中已存在的实例时引发错误。

  • [orm]

    当确定“对象X已经在另一个会话中”时,会话会更仔细地检查;例如,如果您pickle一系列对象并取消pickle(例如,在pylons http会话或类似会话中),它们可以进入新会话而不会发生任何冲突。

  • [orm]

    merge()包含一个关键字参数“dont_load=true”。设置此标志将导致合并操作无法从数据库中加载响应传入的分离对象的任何数据,并将接受传入的分离对象,就像它已经存在于该会话中一样。使用此项将从外部缓存系统分离的对象合并到会话中。

  • [orm]

    当属性分配给时,延迟的列属性不再触发加载操作。在这些情况下,新分配的值将无条件地出现在刷新的update语句中。

  • [orm]

    修正了重新分配集合子集时的截断错误(obj.relation=obj.relation [1:] )

    References: #834

  • [orm]

    反编译的backref配置代码,backrefs在现有属性上执行的步骤现在会引发错误

    References: #832

  • [orm]

    改进了add_property()等的行为,修复了涉及同义词/延迟的问题。

    References: #831

  • [orm]

    修正了clear_mappers()的行为,以更好地在自身之后进行清理。

  • [orm]

    修复为“行切换”行为,即当一个插入/删除组合到一个更新中时;父对象上的多对多关系正确更新。

    References: #841

  • [orm]

    固定的 __hash__ 对于关联代理-这些集合是不可显示的,就像它们的可变python对应物一样。

  • [orm]

    添加了save_或_update的代理, __contains__ 和 __iter__ 作用域会话的方法。

  • [orm]

    修正了很难重现的问题,即通过查询的FROM子句可能会受到某些生成调用的污染。

    References: #852

sql

  • [sql]

    bindparam()上的“shortname”关键字参数已被弃用。

  • [sql]

    添加包含运算符(生成“like%<other>%”子句)。

  • [sql]

    自动标记匿名列表达式。例如选择( [x* 5] )生成“选择x*5作为anon_1”。这允许labelname出现在cursor.description中,然后可以与结果列处理规则适当匹配。(我们不能可靠地对结果列匹配使用位置跟踪,因为text()表达式可能表示多个列)。

  • [sql]

    运算符重载现在由typeengine对象控制——到目前为止,内置的运算符重载是字符串类型重载“+”作为字符串串联运算符。用户定义的类型还可以通过重写adapt-operator(self,op)方法定义自己的运算符重载。

  • [sql]

    将为二进制表达式右侧的非类型化绑定参数分配操作左侧的类型,以便更好地使适当的绑定参数处理生效。

    References: #819

  • [sql]

    已从大多数语句编译中删除正则表达式步骤。也修复

    References: #833

  • [sql]

    修复了空(零列)sqlite插入,允许在自动增量单列表上插入。

  • [sql]

    文本()子句的固定表达式转换;这修复了将文本用于SQL表达式的各种ORM方案。

  • [sql]

    removed clauseParameters对象;compiled.params现在返回一个常规字典,并返回结果。last_inserted_params()/last_updated_params()。

  • [sql]

    固定的insert语句w.r.t.主键列上有基于SQL表达式的默认生成器;对于通过cursor.lastrowid提供该语句的数据库,SQL表达式按正常方式执行内联,但不会为该列触发“postfeet”条件。

  • [sql]

    FUNC可以对对象进行酸洗/取消拾取

    References: #844

  • [sql]

    重写并简化了用于在可选表达式中“目标”列的系统。在SQL方面,这由“corresponding_column()”方法表示。ORM大量使用此方法来将表达式的元素“调整”为类似的、有别名的表达式,以及将最初绑定到表或可选择的结果集列调整为有别名的“对应”表达式。新的重写功能完全一致和准确的行为。

  • [sql]

    添加了一个字段(“info”),用于在架构项上存储任意数据

    References: #573

  • [sql]

    连接上的“properties”集合已重命名为“info”,以匹配架构的可写集合。在0.5之前,仍可以通过“属性”名称访问。

  • [sql]

    修复了使用策略“threadlocal”时事务上的close()方法

  • [sql]

    修复到已编译的绑定参数以不错误地填充“无”

    References: #853

  • [sql]

    <engine_connection>u execute ou clauseElement成为可连接的公共方法。execute ou clauseElement

misc

  • [dialects]

    增加了对maxdb的实验支持(仅限版本>=7.6.03.007)。

  • [dialects]

    Oracle现在将“日期”反映为OracleDetime列,而不是OracleDate列

  • [dialects]

    在Oracle Table_Names()函数中添加了对架构名称的认识,修复了metadata.reflect(schema='someschema')

    References: #847

  • [dialects]

    用于选择具有确定性的函数的MSSQL匿名标签

  • [dialects]

    sqlite将“decimal”作为数字列反映。

  • [dialects]

    使访问DAO检测更加可靠

    References: #828

  • [dialects]

    将方言属性“preexecute-sequences”重命名为“preexecute-pk-sequences”。对于使用旧名称的树外方言,属性代理已就位。

  • [dialects]

    为未知类型反射添加了测试覆盖率。修复了对未知类型的类型反射的sqlite/mysql处理。

  • [dialects]

    添加了real for mysql方言(针对使用real_as_float sql模式的人)。

  • [dialects]

    不带参数构造的mysql float、msfloat和msdouble现在不生成参数ddl,例如“float”。

  • [misc]

    删除了未使用的util.hash()。

0.4.0

Released: Wed Oct 17 2007
  • [no_tags]

    (参见0.4.0beta1了解相对于0.3的重大更改的开始,以及https://www.sqlalchemy.org/trac/wiki/WhatsNewIn04)

  • [no_tags]

    添加了初始Sybase支持(到目前为止,MXODBC)

    References: #785

  • [no_tags]

    增加了对PostgreSQL的部分索引支持。在索引上使用postgres-where关键字。

  • [no_tags]

    基于字符串的查询参数分析/配置文件分析器了解布尔值的更广泛的字符串值范围。

    References: #817

  • [no_tags]

    如果另一方集合不包含该项,则backref移除对象操作不会失败,支持noload集合

    References: #813

  • [no_tags]

    远离的 __len__ 来自“动态”集合,因为它需要发出SQL“count()”操作,从而强制所有列表计算发出冗余的SQL

    References: #818

  • [no_tags]

    添加了内联优化以定位_Dirty(),这可以大大加快对flush()的重复调用,autoflush=true时会发生这种情况。

    References: #816

  • [no_tags]

    IdentifierPreparer的“Requires”引号测试现在基于regex。任何提供自定义的合法字符集或非法初始字符集的树外方言都需要移到regex或override,需要引号。

  • [no_tags]

    Firebird支持_sane_rowcount,并支持_sane_multi_rowcount设置为false,因为Ticket_370(正确的方式)。

  • [no_tags]

    改进和修复火鸟反射:
    • fbdialect现在模仿oracledialect,关于表名和列名的区分大小写(请参见当前文件中的“区分大小写的删除”主题)。

    • fbDialect.table_name()不带系统表(票据:796)。

    • FB现在正确反映列的可空属性。

  • [no_tags]

    修复了SQL编译器对结果集处理中使用的顶级列标签的感知;包含相同列名称的嵌套选择不会影响结果或与结果列元数据冲突。

  • [no_tags]

    query.get()和相关函数(如多对一Lazyloading)使用编译时别名绑定参数名称,以防止名称与已存在于映射的可选对象中的绑定参数发生冲突。

  • [no_tags]

    固定的三级和多级选择和延迟继承加载(即没有选择表的ABC继承)。

    References: #795

  • [no_tags]

    在shard.py中,IDT传递给ID CHOOSER始终是一个列表。

  • [no_tags]

    no arg resultproxy._row_processor()现在是class属性 _process_row .

  • [no_tags]

    增加了对PostgreSQL 8.2+的插入和更新返回值的支持。

    References: #797

  • [no_tags]

    pg reflection在看到默认模式名称被显式用作表中的“schema”参数时,将假定这是用户所需的约定,并将在与外键相关的反射表中显式设置“schema”参数,从而使其仅与使用显式“schema”参数的表构造函数匹配。(即使它是默认模式)。换句话说,sa假定用户在这个用法中是一致的。

  • [no_tags]

    固定的bool/boolean的sqlite反射

    References: #808

  • [no_tags]

    增加了对MySQL的限制更新的支持。

  • [no_tags]

    M2O上的空外键不会触发Lazyload

    References: #803

  • [no_tags]

    Oracle不会隐式地将非类型化结果集转换为Unicode(即,当甚至没有使用类型引擎/string/unicode类型时;以前它检测DBAPI类型并进行转换,无论如何)。应该修复

    References: #800

  • [no_tags]

    修复长表/列名称的匿名标签生成

    References: #806

  • [no_tags]

    火鸟方言现在使用singletonthreadpool作为poolclass。

  • [no_tags]

    Firebird现在使用Dialect.Preparer来格式化序列名

  • [no_tags]

    修复了Postgres和多个两阶段事务的中断。两阶段提交和回滚并不像通常的DBAPI提交/回滚那样自动以新事务结束。

    References: #810

  • [no_tags]

    向_scopedtext mapper扩展添加了一个选项,用于在对象初始化时不自动将新对象保存到会话中。

  • [no_tags]

    修复了Oracle非ANSI联接语法

  • [no_tags]

    pickletype和interval类型(在db上,不支持本地的类型)现在稍微快一点。

  • [no_tags]

    将float和time类型添加到firebird(fbfloat和fbtime)。文本和二进制类型的固定blob子类型。

  • [no_tags]

    已更改的API in_ 操作员。在()中,现在接受一个参数,该参数是一个值序列或可选参数。将值作为varargs传入的旧API仍然有效,但已弃用。

0.4.0beta6

Released: Thu Sep 27 2007
  • [no_tags]

    会话标识映射现在为 弱引用 默认情况下,使用weak_identity_map=false使用常规dict。我们使用的弱dict是自定义的,用于检测“脏”的实例,并保持对这些实例的临时强引用,直到刷新更改。

  • [no_tags]

    已重新组织映射器编译,以便大多数编译在映射器构造时发生。这允许我们对mapper.compile()的调用更少,也允许基于类的属性强制编译(即user.addresses==7将编译所有映射器;这是)。这里唯一需要注意的是,继承映射器现在在构造时会查找其继承的映射器;因此继承关系中的映射器需要按继承顺序构造(无论如何,这应该是正常情况)。

    References: #758

  • [no_tags]

    在postgres检测到的关键字中添加了“fetch”,以指示结果行保持语句(即除了“select”)。

  • [no_tags]

    添加了sqlite保留关键字的完整列表,以便正确转义它们。

  • [no_tags]

    加强了查询生成的“急切加载”别名与实际获取迫切加载行的query.instances()之间的关系。如果HoggerLoader没有为该语句专门生成别名,那么在获取行时,HoggerLoader将不会生效。这可以防止列意外地被抓取,因为当它们不是用于此目的时,它们是一个热切负载的一部分,这可以在文本SQL和一些继承情况下发生。特别重要的是,列的“匿名别名”现在使用简单的整数计数来生成标签。

  • [no_tags]

    已从clauseElement.compile()中删除“parameters”参数,并替换为“column_keys”。发送到execute()的参数只与insert/update语句编译过程进行交互,以显示的列名称为依据,而不是这些列的值。生成更一致的执行/执行管理行为,在内部稍微简化一些。

  • [no_tags]

    向pickleType添加了“comparator”关键字参数。默认情况下,“mutable”pickletype使用对象的dumps()表示对对象进行“深度比较”。但这不适用于字典。提供适当uueq_uu()实现的pickled对象可以用“pickleType(comparator=operator.eq)”设置。

    References: #560

  • [no_tags]

    添加的session.is_-modified(obj)方法;执行与flush操作中相同的“history”比较操作;设置include_collections=false给出的结果与flush确定是否为实例行发出更新时使用的结果相同。

  • [no_tags]

    向sequence添加了“schema”参数;当sequence位于备用模式中时,将其与postgres/oracle一起使用。实现的一部分,应修复。

    References: #584, #761

  • [no_tags]

    修复了mysql枚举空字符串的反射。

  • [no_tags]

    对于使用3.23的用户,将mysql方言更改为使用旧的limit<offset>,<limit>语法而不是limit<l>offset<o>。

    References: #794

  • [no_tags]

    添加了'passive_deletes=“all”'标志到relation(),在删除父对象的刷新过程中禁用所有外键属性的清零。

  • [no_tags]

    列默认值和onUpdates(以内联方式执行)将为子查询和其他需要表达式的括号添加括号。

  • [no_tags]

    字符串/unicode类型在没有长度时自动转换为文本/clob的行为现在发生。 only 对于不带参数的字符串或Unicode类型。如果使用不带长度的varchar或nchar(string/unicode的子类),则方言会将它们解释为varchar/nchar;不会发生“magic”转换。这是不太令人惊讶的行为,特别是这有助于Oracle将基于字符串的绑定参数保持为varchars而不是clobs。

    References: #793

  • [no_tags]

    修复sharedsession以使用延迟列。

    References: #771

  • [no_tags]

    用户定义的shard_chooser()函数必须接受“clause=none”参数;这是传递给session.execute(语句)的子句元素,可以用来确定正确的shard id(因为execute()不带实例)。

  • [no_tags]

    调整了不匹配“==”等的运算符优先级,使~(x<operator>y)产生not(x<op>y),更好地与老版本的MySQL兼容。这不适用于“~(x==y)”,因为在0.3中~(x==y)编译为“x!”=Y”,但仍适用于中间等运算符。

    References: #764

  • [no_tags]

    其他票:、、。

    References: #728, #757, #768, #779

0.4.0beta5

no release date
  • [no_tags]

    连接池修复;beta4的更好性能仍然存在,但修复了“连接溢出”和其他存在的错误(如)。

    References: #754

  • [no_tags]

    修复了从自定义继承条件确定正确的同步子句时出现的错误。

    References: #769

  • [no_tags]

    队列池大小/溢出的扩展“engine-from-config”强制。

    References: #763

  • [no_tags]

    MySQL视图可以再次反映。

    References: #748

  • [no_tags]

    AssociationProxy现在可以使用自定义getter和setter。

  • [no_tags]

    修复了ORM查询之间的故障。

  • [no_tags]

    固定顺序特性酸洗

    References: #762

  • [no_tags]

    SQL表达式默认值和序列现在在插入或更新期间对所有非主键列执行“inline”,在executemany()样式调用期间对所有列执行“inline”。任何insert/update语句上的inline=true标志还强制使用单个execute()执行相同的行为。result.postfeet_Cols()是列的集合,前一个insert或update语句包含一个SQL端默认表达式。

  • [no_tags]

    修正了pg executemany()的行为。

    References: #759

  • [no_tags]

    Postgres为没有默认值的主键列反映autoincrement=false的表。

  • [no_tags]

    Postgres不再使用单独的execute()调用包装executeMany(),而是支持性能。”由于psycopg2没有为executeMany()报告正确的行数,对已删除项(使用executeMany)的行数“/”并发性“检查被pg禁用。

  • [fixed] [tickets]

    References: #742

  • [fixed] [tickets]

    References: #748

  • [fixed] [tickets]

    References: #760

  • [fixed] [tickets]

    References: #762

  • [fixed] [tickets]

    References: #763

0.4.0beta4

Released: Wed Aug 22 2007
  • [no_tags]

    整理从sqlAlchemy导入时在命名空间中结束的内容 * “:

  • [no_tags]

    不再导入“table”和“column”。它们通过直接引用(如“sql.table”和“sql.column”)或从SQL包导入glob来保持可用。当刚开始使用sqlAlchemy时,很容易意外地使用sql.expressions.table而不是schema.table,同样的,列。

  • [no_tags]

    内部ISH类(如ClauseElement、FromClause、NullTypeEngine等)也不再导入到命名空间中。

  • [no_tags]

    “smallinteger”兼容性名称(small i!)不再导入,但现在仍保留在schema.py中。小整数(大I!)仍然导入。

  • [no_tags]

    连接池在内部使用“threadlocal”策略,为“上下文”连接返回已绑定到线程的相同连接;这些是在执行“无连接”执行(如insert().execute())时使用的连接。这类似于“thread local”引擎策略的“部分”版本,但没有线程本地事务部分。我们希望它能减少连接池开销和数据库使用。但是,如果它被证明以一种负面的方式影响稳定性,我们会立刻把它回滚。

  • [no_tags]

    修正绑定参数处理,使“假”值(如空字符串)仍然得到处理/编码。

  • [no_tags]

    修正为select()“generative”行为,这样调用column()、select_from()、correlate()和with_prefix()不会修改原始select对象

    References: #752

  • [no_tags]

    在类型中添加了“旧”适配器,这样用户定义的typeengine和typecorator类(定义convert_bind_param()和/或convert_result_value())将继续工作。还支持调用这些方法的super()版本。

  • [no_tags]

    添加了session.prune(),修剪掉在不再在其他地方引用的会话中缓存的实例。(用于强引用标识映射的实用程序)。

  • [no_tags]

    向事务添加了close()方法。如果事务是最外面的事务,则使用回滚关闭事务,否则只会在不影响外部事务的情况下结束。

  • [no_tags]

    事务性会话和非事务性会话更好地与绑定连接集成;close()将确保连接事务性状态与绑定到会话之前存在的状态相同。

  • [no_tags]

    修改后的SQL运算符函数为模块级运算符,允许SQL表达式可pickle。

    References: #735

  • [no_tags]

    映射器的小调整 class.__init__ 允许PY2.6对象。uu init_uu()行为。

  • [no_tags]

    已修复select()的“prefix”参数

  • [no_tags]

    connection.begin()不再接受nested=true,此逻辑现在全部位于begin_nested()中。

  • [no_tags]

    修复涉及级联的新“动态”关系加载器

  • [fixed] [tickets]

    References: #735

  • [fixed] [tickets]

    References: #752

0.4.0beta3

Released: Thu Aug 16 2007
  • [no_tags]

    SQL类型优化:

  • [no_tags]

    新的性能测试显示了一个组合的mass insert/mass select测试,其函数调用比对0.3运行的相同测试少68%。

  • [no_tags]

    结果集迭代的总体性能提高约为10-20%。

  • [no_tags]

    在types.abstractType中,convert_bind_param()和convert_result_value()已迁移到可调用的返回bind_processor()和result_processor()方法。如果不返回可调用,则不调用前/后处理函数。

  • [no_tags]

    在整个base/sql/defaults中添加了钩子,以优化对bind-param/result处理器的调用,从而使方法调用开销最小化。

  • [no_tags]

    为executeMany()场景添加了支持,这样不需要的“最后一行ID”逻辑就不会启动,参数不会被过度遍历。

  • [no_tags]

    已将“inherit_foreign_keys”参数添加到mapper()。

  • [no_tags]

    在sqlite中添加了对字符串日期传递的支持。

  • [fixed] [tickets]

    References: #738

  • [fixed] [tickets]

    References: #739

  • [fixed] [tickets]

    References: #743

  • [fixed] [tickets]

    References: #744

0.4.0beta2

Released: Tue Aug 14 2007

oracle

  • [oracle] [improvements.]

    为MySQL加载数据后自动提交。

  • [oracle] [improvements.]

    添加了一个基本的sessionextension类,允许在flush()、commit()和rollback()边界上执行用户定义的功能。

  • [oracle] [improvements.]

    从_config()函数添加了引擎_,以帮助从.ini样式的配置创建_engine()。

  • [oracle] [improvements.]

    base_mapper()变为普通属性。

  • [oracle] [improvements.]

    session.execute()和scalar()可以使用给定的子句来搜索要绑定的表。

  • [oracle] [improvements.]

    会话自动从具有绑定的映射器推断表,也使用基映射器以便继承层次结构自动绑定。

  • [oracle] [improvements.]

    将克劳塞维瑟遍历移回内联非递归。

misc

  • [fixed] [tickets]

    References: #730

  • [fixed] [tickets]

    References: #732

  • [fixed] [tickets]

    References: #733

  • [fixed] [tickets]

    References: #734

0.4.0beta1

Released: Sun Aug 12 2007

orm

  • [orm]

    速度!随着最近对resultproxy的加速,对于大负载,函数调用的总数显著减少。

  • [orm]

    test/perf/masschengload.py报告0.4,因为在所有SA版本(0.1、0.2和0.3)中函数调用的数量最少。

  • [orm]

    新集合类API和实现。集合现在通过修饰而不是代理进行检测。您现在可以拥有管理自己成员资格的集合,并且类实例将直接在Relationship属性上公开。对大多数用户来说,更改是透明的。

    References: #213

  • [orm]

    已删除instructedList(按原样),并且关系属性不再具有“clear()”、“.data”或集合类型提供的方法之外的任何其他添加方法。当然,您可以将它们添加到自定义类中。

  • [orm]

    _ setitem类赋值现在为现有值(如果有的话)触发移除事件。

  • [orm]

    dict likes用作集合类不再需要更改 __iter__ 语义-默认情况下使用itervalues()。这是一个向后不相容的变化。

  • [orm]

    在大多数情况下,已映射集合不再需要子类化dict。collections提供了可以通过指定的列或您选择的自定义函数为对象设置键的隐藏实现。

  • [orm]

    集合分配现在需要兼容的类型-分配“无”以清除集合或将列表分配给dict集合现在将引发参数错误。

  • [orm]

    attributeextension已移动到接口,现在为.delete。移除事件方法签名也已交换。

  • [orm]

    查询大修:

  • [orm]

    所有selectxxx方法都已弃用。Generative方法现在是标准的处理方法,例如filter()、filter_by()、all()、one()等。不推荐使用的方法都用它们的新替换来记录。

  • [orm]

    类级属性现在可用作查询元素…不再有“.c.”!class.c.propname“现在被class.propname取代。支持所有子句运算符,以及更高级别的运算符,例如class.prop==<some instance>对于标量属性,class.prop.包含(<some instance>)和class.prop.any(<some expression>)对于基于集合的属性(所有这些属性也都是可取消的)。当然,基于表的列表达式以及通过“c”安装在映射类上的列仍然完全可用,并且可以与新属性自由混合。

    References: #643

  • [orm]

    删除了古老的查询。请选择“按属性名()功能”。

  • [orm]

    预先加载所使用的别名逻辑已被通用化,因此它还为查询添加了完全自动的别名支持。不再需要创建显式别名来多次联接到同一个表; even for self-referential relationships .

    • join()和outerjoin()接受参数“aliased=true”。yhis使它们的连接建立在有别名的表上;随后对filter()和filter_by()的调用将把所有表表达式(是的,使用原始映射表的实数表达式)转换为该join()期间别名的表达式(即,直到调用reset_joinpoint()或另一个join())。

    • join()和outerjoin()接受参数“id=<somestring>”。当与“aliased=true”一起使用时,可以由add_entity(cls,id=<somestring>)引用该ID,以便您可以选择联接的实例,即使它们来自别名。

    • join()和outerjoin()现在可以使用自引用关系!使用“aliased=true”,您可以根据需要加入任意深度的层,即query.join。( [“儿童”,“儿童”] ,aliased=true);筛选条件将针对最右边的联接表。

  • [orm]

    添加了query.popute_existing(),标记查询以重新加载查询中涉及的所有实例(包括迫切加载的实体)的所有属性和集合。

    References: #660

  • [orm]

    添加了chengload_all(),允许chengload_all(“x.y.z”)指定给定路径中所有属性的预加载。

  • [orm]

    大检修:

  • [orm]

    “配置”名为“sessionmaker()”的会话的新函数。将各种关键字参数发送到此函数一次,返回一个新类,该类针对该构造型创建一个会话。

  • [orm]

    sessionTransaction已从“public”API中删除。现在可以对会话本身调用begin()/commit()/rollback()。

  • [orm]

    会话还支持保存点事务;调用begin_nested()。

  • [orm]

    当垂直或水平分区(即使用多个引擎)时,会话支持两阶段提交行为。使用twophase=true。

  • [orm]

    会话标志“transactional=true”生成一个会话,该会话在首次使用时总是将自己放入事务中。在commit()、rollback()或close()之后,事务结束;但在下次使用时重新开始。

  • [orm]

    会话支持“autoflush=true”。这将在每个查询之前发出flush()。与事务性一起使用,您只需保存()/update(),然后查询,新对象就会出现在那里。在末尾使用commit()(如果不是事务性的,则使用flush())来清除剩余的更改。

  • [orm]

    新的SCOPED_SESSION()函数取代了SessionContext和Assignmapper。构建在“sessionaker()”概念之上,以生成一个类,该类的session()构造返回线程本地会话。或者,将所有会话方法作为类方法调用,即Session.save(Foo);Session.Commit()。就像以前的“物品店”一样。

  • [orm]

    向会话添加了新的“binds”参数,以支持使用sessionmaker()函数配置多个绑定。

  • [orm]

    添加了一个基本的sessionextension类,允许在flush()、commit()和rollback()边界上执行用户定义的功能。

  • [orm]

    基于查询的关系()可用于动态加载程序()。这是一个 可写的 集合(支持append()和remove()),当访问该集合进行读取时,它也是一个活动查询对象。非常适合处理只需要部分加载的非常大的集合。

  • [orm]

    flush()-嵌入的内联插入/更新表达式。将任何SQL表达式(如“sometable.c.column+1”)分配给实例的属性。在flush()中,映射器检测到表达式并将其直接嵌入到insert或update语句中;属性在实例上延迟,因此下次访问它时,它将加载新值。

  • [orm]

    介绍了一种基本的切分(水平缩放)系统。该系统基于用户定义的“分片策略”函数,使用修改后的会话,在多个数据库之间分配读写操作。实例及其依赖项可以基于属性值、循环方法或任何其他用户定义的系统在多个数据库中分布和查询。

    References: #618

  • [orm]

    热切的加载已经得到了增强,允许更多的连接出现在更多的地方。它现在在任意深度沿自参考和循环结构发挥作用。加载循环结构时,在relation()上指定“join_depth”,指示希望表连接到自身的次数;每个级别都有一个不同的表别名。别名本身是在编译时使用一个简单的计数方案生成的,现在对眼睛来说要容易得多,当然也完全具有确定性。

    References: #659

  • [orm]

    添加了复合列属性。这允许您在使用ORM时创建由多个列表示的类型。新类型的对象在查询表达式、比较、query.get()子句等中具有完全的功能,并且它们的作用就像是常规的单列标量…但他们不是!使用复合函数(cls, * 列)在映射器的“属性”dict中,cls的实例将被创建/映射到单个属性,该属性由对应于 * 柱。

    References: #211

  • [orm]

    改进了对自定义column_property()属性的支持,这些属性具有相关的子查询,现在可以更好地处理急切的加载。

  • [orm]

    主键“折叠”行为;映射器将分析给定可选主键“等效”中的所有列,即通过外键关系或显式继承条件等效的列。主要用于联合表继承方案,其中继承表中不同的命名pk列应“折叠”为单值(或更少值)主键。修复类似的问题。

    References: #611

  • [orm]

    联接表继承现在将只针对联接的根表生成所有继承类的主键列。这意味着根表中的每一行对于单个实例都是不同的。如果出于某些罕见的原因,这是不可取的,那么单个映射器上的显式主键设置将覆盖它。

  • [orm]

    当“多态”标志与联接的表或单表继承一起使用时,将针对继承层次结构的根类生成所有标识键;这允许query.get()使用与非多态get相同的缓存语义进行多态工作。请注意,这目前不适用于具体的继承。

  • [orm]

    二次继承加载:可以构造多态映射器 没有 选择表参数。继承其表在初始加载中没有表示的映射器将立即发出第二个SQL查询,每个实例一次(即,对于大列表来说效率不高),以便加载其余的列。

  • [orm]

    二级继承加载还可以通过“多态提取”参数(可以设置为“select”或“deferred”)将其第二个查询移动到列级“deferred”加载中。

  • [orm]

    现在可以使用include_columns/exclude_columns将可用可选列的一个子集映射到映射器属性。

    References: #696

  • [orm]

    添加了undeffer_group()mapperoption,将由“group”连接的一组“deferred”列设置为“undeferred”。

  • [orm]

    重写“确定性别名”逻辑以作为SQL层的一部分,生成更简单的别名和标签名称,更多地采用Hibernate样式。

sql

  • [sql]

    速度!子句编译以及SQL构造的机制都得到了极大的简化和简化,使语句构造/编译开销提高了20-30%,即0.3。

  • [sql]

    所有“type”关键字参数,如bindparam()、column()、column()和func.<something>(),重命名为“typeuu”。这些对象仍将其“type”属性命名为“type”。

  • [sql]

    区分大小写=(true false)设置已从架构项中删除,因为检查此状态会增加大量方法调用开销,并且没有合适的理由将其设置为false。所有小写的表名和列名都将被视为不区分大小写(是的,我们也会根据Oracle的大写样式进行调整)。

extensions

  • [extensions]

    proxyengine被临时删除,等待实际工作的替换。

  • [extensions]

    selectresults已被query替换。selectresults/selectresults不存在,但只返回稍微修改过的查询对象以实现向后兼容性。selectResults中的join_to()方法不再存在,需要使用join()。

mysql

  • [mysql]

    通过反射加载的表名和列名现在是Unicode。

  • [mysql]

    现在支持所有标准列类型,包括set。

  • [mysql]

    现在可以在一次往返中执行表反射。

  • [mysql]

    现在支持ansi和ansi_引号SQL模式。

  • [mysql]

    现在反映了索引。

oracle

  • [oracle]

    对添加的out参数非常基本的支持;使用sql.outparam(name,type)设置out参数,就像bindparam();执行后,可以通过result.out_参数字典获得值。

    References: #507

misc

  • [transactions]

    添加了对事务的上下文管理器(带语句)支持。

  • [transactions]

    添加了对两阶段提交的支持,目前与MySQL和Postgres一起使用。

  • [transactions]

    添加了使用保存点的子事务实现。

  • [transactions]

    增加了对保存点的支持。

  • [metadata]

    表可以在不预先声明的情况下从数据库集中反映出来。元数据(engine,reflect=true)将加载数据库中存在的所有表,或者使用metadata.reflect()进行更精细的控制。

  • [metadata]

    DynamicMetadata已重命名为ThreadLocalMetadata

  • [metadata]

    threadLocalMetadata构造函数现在不接受任何参数。

  • [metadata]

    boundMetadata已删除-常规元数据等效

  • [metadata]

    numeric和float类型现在有一个“asdecimal”标志;对于numeric,默认为true,对于float,默认为false。如果为true,则值返回为decimal.decimal对象;如果为false,则值返回为float()。true/false的默认值已经是pg和mysql的dbapi模块的行为。

    References: #646

  • [metadata]

    新的SQL运算符实现,它从表达式结构中删除所有硬编码的运算符并将它们移入编译;允许更大的运算符编译灵活性;例如,在字符串上下文中使用时,“+”编译为“”;在MySQL中使用时,“+”编译为“”;而在数字上下文中,它编译为“+”。修复。

    References: #475

  • [metadata]

    “匿名”别名和标签名现在以完全确定的方式在SQL编译时生成…不再有随机十六进制ID

  • [metadata]

    对SQL元素(第条)进行了重大的架构检修。所有元素都共享一个通用的“可变性”框架,该框架允许一致的方法就地修改元素以及生成行为。提高ORM的稳定性,这使得大量使用SQL表达式的突变。

  • [metadata]

    select()和union()现在具有“生成”行为。order ou by()和group ou by()等方法返回 new 实例-原始实例保持不变。非生成性方法仍然存在。

  • [metadata]

    select/union的内部结构被大大简化了,所有关于“is subquery”和“correlation”的决策都被推到了SQL生成阶段。select()元素现在 从未 因其封闭容器或任何方言的编译过程而变异

    References: #52, #569

  • [metadata]

    select(scalar=true)参数已弃用;请使用select(..).as_scalar()。结果对象遵循完整的“列”接口,并在表达式中更好地发挥作用。

  • [metadata]

    添加了select()。带有前缀(“foo”),允许将任何一组关键字放在select的columns子句之前。

    References: #504

  • [metadata]

    为行添加了数组切片支持 [<index>]

    References: #686

  • [metadata]

    结果集更好地尝试将cursor.description中的dbapi类型与方言定义的typeengine对象进行匹配,然后将其用于结果处理。注意:这只对文本SQL有效;构造的SQL语句总是具有显式类型映射。

  • [metadata]

    CRUD操作的结果集会立即关闭其基础光标,并且如果为操作定义了连接,也会自动断开连接;这样可以更有效地为连续的CRUD操作使用连接,而不太可能出现“挂起连接”。

  • [metadata]

    列默认值和onupdate python函数(即传递给columndefault)可能采用零个或一个参数;一个参数是executionContext,从中可以调用“context.parameters”。 [帕拉姆] “访问附加到语句的其他绑定参数值。用于执行的连接也可用,因此您可以预执行语句。

    References: #559

  • [metadata]

    添加了对序列的“显式”创建/删除/执行支持(即,可以将“可连接”传递给序列上的每个方法)。

  • [metadata]

    操作模式时更好地引用标识符。

  • [metadata]

    标准化无法定位类型的表反射行为;将替换nullType,并引发警告。

  • [metadata]

    columncollection(即表上的“c”属性)遵循“uu contains_uuu”的字典语义。

    References: #606

  • [engines]

    速度!对结果处理和绑定参数处理的机制进行了全面检查、简化和优化,以尽可能少地发出方法调用。对mass insert和mass rowset迭代的台架测试都显示0.4比0.3快一倍多,使用的函数调用减少了68%。

  • [engines]

    现在,您可以钩住池生命周期,并在每个新的DBAPI连接、池签出和签入处运行SQL语句或其他逻辑。

  • [engines]

    连接获得一个.properties集合,内容的作用域为基础DBAPI连接的生存期。

  • [engines]

    删除了自动关闭光标并禁止从池中打开光标参数;由于结果代理和连接通常关闭光标,因此减少了开销。

  • [postgres]

    为使用Postgres数组数据类型添加了PGARRAY数据类型。

Previous: 0.5换热器 Next: 0.3换热器