版本:1.1.0b2 |发布日期:2016年7月1日

SQLAlchemy 1.1文档

构造函数和对象初始化

映射不会对类的构造函数(__init__)方法施加任何限制或要求。您可以自由地为需要的函数请求任何参数,为ORM未知的实例分配属性,并且通常在编写Python类的构造函数时做其他任何事情。

当从数据库行重新创建对象时,SQLAlchemy ORM不会调用__init__ORM的过程与Python标准库的pickle模块类似,调用低级别的__new__方法,然后直接在实例上静静地恢复属性,而不是调用__init__

如果您需要在数据库加载的实例准备就绪之前进行一些设置,可以使用@reconstructor修饰器将一个方法标记为__init__每次加载或重建一个实例时,SQLAlchemy都会调用这个方法,而没有参数。这对于重新创建通常在__init__中分配的瞬态属性非常有用:

from sqlalchemy import orm

class MyMappedClass(object):
    def __init__(self, data):
        self.data = data
        # we need stuff on all instances, but not in the database.
        self.stuff = []

    @orm.reconstructor
    def init_on_load(self):
        self.stuff = []

在执行obj = MyMappedClass()时,Python将__init__正常和data参数是必需的。When instances are loaded during a Query operation as in query(MyMappedClass).one(), init_on_load is called.

任何方法都可以标记为reconstructor(),甚至是__init__方法。SQLAlchemy将调用没有参数的重构器方法。实例的标量(非集合)数据库映射属性将可用于该函数中。急切加载的集合通常还不可用,通常只包含第一个元素。在此阶段对对象所做的ORM状态更改将不会记录下一次flush()操作,因此重构器中的活动应保守。

reconstructor() is a shortcut into a larger system of “instance level” events, which can be subscribed to using the event API - see InstanceEvents for the full API description of these events.

sqlalchemy.orm。 T0> 重建 T1> ( T2> FN T3> ) T4> ¶ T5 >

装饰方法作为“重建”的钩子。

Designates a method as the “reconstructor”, an __init__-like method that will be called by the ORM after the instance has been loaded from the database or otherwise reconstituted.

重建器将被调用,没有参数。实例的标量(非集合)数据库映射属性将可用于该函数中。急切加载的集合通常还不可用,通常只包含第一个元素。在此阶段对对象所做的ORM状态更改将不会记录下一次flush()操作,因此重构器中的活动应保守。