在mixin中使用外键

时间:2014-07-02 04:04:23

标签: python sqlalchemy foreign-keys

我正在尝试使用sqlalchemy将图形跟踪及其序列存储在2个单独的表中。

同一图表上的跟踪列表存储在ListContainer表中。每个ListItem表示跟踪中的项。每个跟踪项都有一个跟踪的外键,因为我想在跟踪中记下它的位置。

这是我目前的代码:

#store traces
class ListContainer():
        id = Column(Integer, primary_key=True)
        # timestamp = Column(DateTime, default=datetime.datetime.now())
        name = Column(String)
#endclass

#store flow in traces
class ListItem():
        id = Column(Integer, primary_key=True)
        @declared_attr
        trace_id = Column(Integer, ForeignKey(ListContainer.id))
        item_pos = Column(Integer)
        #start_ea
        #end-ea
#endclass

class Trace(Base, ListContainer):
        __tablename__="trace_table"


class TraceItem(Base, ListItem):
        __tablename__="trace_items"
        start_ea = Column(String)

但是,我目前收到以下错误:

    trace_id = Column(Integer, ForeignKey(ListContainer.id))
           ^
SyntaxError: invalid syntax

使用mixin类将ForeignKey添加到表中的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您只能修饰函数,以便出现语法错误。

如果您follow the docs,您将看到mixin中的外键应包含在装饰函数中。

class ListItem(object):
    # ...

    @declared_attr
    def trace_id(cls):
        return Column(Integer, ForeignKey(ListContainer.id))

    # ...