【问题标题】:Foreign key to a not-yet-defined class in SQL AlchemySQLAlchemy中尚未定义的类的外键
【发布时间】:2015-03-23 07:43:38
【问题描述】:

我们正在尝试做这样的事情:范式是一个“抽象”(在 Django 术语中)基础,它只包含所有范式的公共字段。它必须对 Person 有一个外键(准确地说是两个),但 Person 是一个范式,稍后声明(甚至在一个单独的文件中)。这甚至可以使用声明性 API 吗?我知道如何构造一个具有自身外键的类,但问题是这取决于一个类:Person 必须有两个外键 自身,而另一个子类 declarative_base(cls= Paradigm) 必须有两个外键,不是它自己,而是 Person。

【问题讨论】:

    标签: sqlalchemy abstract-class forward-declaration


    【解决方案1】:

    是的,你可以。阅读ForeignKey 文档:

    键关系的单个目标列。 字符串形式的 Column 对象或列名。

    因此您可以将另一个表称为:

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

    Object Relational Tutorial也有很多例子。

    【讨论】:

    • 嗯...当然,这是我尝试的第一件事。但是我收到一个错误“sqlalchemy.exc.InvalidRequestError:具有其他列的外键的列必须声明为声明性混合类上的声明 attr 可调用对象”,老实说,我不太明白。我认为这意味着它无法完成,但现在它似乎意味着完全不同的东西。 :-/
    • 产生错误的代码示例会有所帮助。另请查看Mixing in Relationships 文档,该文档解释了在混合外键/关系时出现错误的原因。
    • 是的,如果我知道我正在编写 mixins,那将会有所帮助。 :-D 是什么决定了基类是否是mixin?只是它在基础元组中的位置(首先是真正的基础,其他是混合)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多