如何在backref(..,order_by = ..)中的mixin类中使用SQLAlchemy的列名?

时间:2013-02-24 16:09:05

标签: python sqlite python-2.7 sqlalchemy

我修改Base类以包含我的所有表所具有的三个默认列:

class Base(object):
    id            = Column(Integer, primary_key=True)
    date_created  = Column(DateTime, default=func.current_timestamp())
    date_modified = Column(DateTime, default=func.current_timestamp(),
                                     onupdate=func.current_timestamp())

我在两列之间有一对多的关系:

class User(Base):
    __tablename__ = 'users'

    name          = Column(Text)
    password      = Column(Text)

    items = relationship("Item", backref=
                 backref('user', order_by=date_modified),
                                 cascade="all, delete, delete-orphan")

class Item(Base):
    __tablename__ = 'items'

    user_id       = Column(Integer, ForeignKey('users.id'))
    title         = Column(Text)

如果我在每个表的类中明确定义了date_created和date_modified列,那么以前工作正常。但是,从Base继承时,它不起作用,我收到以下错误:

  

NameError :姓名' date_modified '未定义

如何使用order_by=column_from_mixinorder_by=date_modified)?

对backref关系进行排序

谢谢。

1 个答案:

答案 0 :(得分:5)

您可以使用以下任何一种:

backref('user', order_by=lambda: User.date_modified)
backref('user', order_by='User.date_modified')

可以使用类名User.date_modified访问类属性,但此时仍未定义类本身。提供可调用(第二种情况在内部转换为可调用)会推迟名称解析,直到首次使用映射为止,此时所有映射的类都被定义。