【问题标题】:Foreign Key could not be found with SqlAlchemy and PostgreSQLSqlAlchemy 和 PostgreSQL 找不到外键
【发布时间】:2018-02-02 17:13:08
【问题描述】:

我刚刚开始了一个 Flask - SqlAlchemy 项目,但在使用外键时遇到了一些问题。

我有表格用户和投资组合。投资组合对用户有一个外键,使用用户名。我是这样设置模型的。

class User(db.Model):
  __tablename__ = 'portfolio_users'
  __table_args__ = {"schema":"keldan"}
  username = Column(String(), primary_key=True)
  date_added = Column(DateTime())

class Portfolio(db.Model):
  __tablename__ = 'portfolios'
  __table_args__ = {"schema":"keldan"}
  id = Column('pid', Integer(), Sequence('portfolios_pid_seq'), primary_key=True)
  date_added = Column(DateTime())
  name = Column(String())
  username = Column(String(), ForeignKey('portfolio_users.username'))
  user = relationship('User', backref=backref('portfolios', cascade='save-update, merge, delete, delete-orphan'))

我尝试运行简单的全选查询时遇到的错误是:

sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'portfolios.username' could not find table 'portfolio_users' with which to generate a foreign key to target column 'username'

表格是这样创建的:

CREATE TABLE keldan.portfolio_users
(
  username text NOT NULL,
  date_added date NOT NULL,
  CONSTRAINT users_pk PRIMARY KEY (username)
)
WITH (
  OIDS=FALSE
);

CREATE TABLE keldan.portfolios
(
  pid serial NOT NULL,
  username text NOT NULL,
  date_added date NOT NULL,
  name text NOT NULL,
  CONSTRAINT portfolios_pk PRIMARY KEY (pid),
  CONSTRAINT portfolios_fk FOREIGN KEY (username)
      REFERENCES keldan.portfolio_users (username) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);

我花了一天的大部分时间试图解决这个问题或使用 primaryjoin 解决问题,但似乎没有任何效果。

【问题讨论】:

    标签: postgresql flask-sqlalchemy python-3.6


    【解决方案1】:

    我终于找到了我一直在寻找的答案here

    如果您没有使用默认架构(公共),那么为每个类指定架构是不够的,但我还需要在外键中指定它。

    username = Column(String(), ForeignKey('keldan.portfolio_users.username'))
    

    【讨论】:

      猜你喜欢
      • 2019-11-05
      • 2020-11-01
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      • 2023-03-14
      • 2012-02-29
      • 2015-04-07
      • 1970-01-01
      相关资源
      最近更新 更多