gpt4 book ai didi

postgresql - 使用 SqlAlchemy 和 PostgreSQL 找不到外键

转载 作者:行者123 更新时间:2023-11-29 12:02:39 25 4
gpt4 key购买 nike

我刚刚启动了一个 Flask - SqlAlchemy 项目,但在使用外键时遇到了一些麻烦。

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

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 进行变通,但似乎没有任何效果。

最佳答案

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

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

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

关于postgresql - 使用 SqlAlchemy 和 PostgreSQL 找不到外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48587699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com