如何在SQLAlchemy中指定外键列值?

时间:2015-06-18 17:24:08

标签: python exception orm sqlalchemy foreign-keys

我的一个模型有以下关系:

class User(Base):
    account     = relationship("Account")

我想手动设置帐号ID。

我的第一次尝试是:

class User(Base):
    account     = relationship("Account")
    accounts_id = Column(Integer, ForeignKey("accounts.id"), nullable=True)

    @classmethod
    def from_json(cls, json):
        appointment = Appointment()
        appointment.account_id = json["account_id"]
        return appointment

以上的工作。我们无法引用此专栏,因为SQLAlchemy会引发一个问题。这是例外:

sqlalchemy.exc.InvalidRequestError: Implicitly combining column users.accounts_id with column users.accounts_id under attribute 'accounts_id'.  Please configure one or more attributes for these same-named columns explicitly.

我试图通过文档进行搜索,并且通过多种方式获取属性,但我无法找到,更不用说设置它了。

  print(self.account.account_id)
  print(self.account.relationhip)
  print(self.account.properties)
  print(self.account.primaryjoin)

有什么想法吗?

[编辑 - 上面添加的例外]

1 个答案:

答案 0 :(得分:6)

使用Account类定义relationship,并添加backref关键字参数:

from sqlalchemy.orm import relationship

class User(Base):

    accounts_id = Column(Integer, ForeignKey('account.id'))

class Account(Base):

    users = relationship('User', backref='account')
  

如果在单个关系中使用backref关键字,则与使用back_populates分别创建上述两个关系的情况完全相同。

<强>参考