我在Postgres中创建了一个数据库和架构。我有我的模型,当我运行使用Flask-Migrate的python manager.py db migrate
时,我收到以下错误。但是,db init
命令有效。
sqlalchemy.exc.ProgrammingError: (ProgrammingError) no schema has been selected to create in
现在,当我向模型中添加__tablename__
和__table_args__ = {"schema": "name_of_schema"}
时,我会收到以下错误,db init
和db migrate
:
sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'deploy.instance_id' could not find table 'instance' with which to generate a foreign key to target column 'id'
然而,我的关系看起来还不错。我已经看过很多例子,他们在没有Flask-Migrate的情况下在SQLite上正常工作。
我有三个表如下(删除大多数列):
class Application(db.Model):
__tablename__ = 'application'
__table_args__ = {"schema":"v1"}
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=False)
instances = db.relationship('Instance', backref='application', lazy='dynamic')
def __repr__(self):
return '<ID %r>' % (self.id)
class Instance(db.Model):
__tablename__ = 'instance'
__table_args__ = {"schema":"v1"}
id = db.Column(db.Integer, primary_key=True)
host = db.Column(db.String(80), unique=False)
application_id = db.Column(db.Integer, db.ForeignKey('application.id'))
deploys = db.relationship('Deploy', backref='instance', lazy='dynamic')
def __repr__(self):
return '<ID %r>' % (self.id)
class Deploy(db.Model):
__tablename__ = 'deploy'
__table_args__ = {"schema":"v1"}
id = db.Column(db.Integer, primary_key=True)
tag = db.Column(db.String(80), unique=False)
instance_id = db.Column(db.Integer, db.ForeignKey('instance.id'))
def __repr__(self):
return '<ID %r>' % (self.id)
关系是:
当我删除所有关系并创建独立表时,我仍然收到第一个错误:sqlalchemy.exc.ProgrammingError: (ProgrammingError) no schema has been selected to create in
。有什么问题,我该如何解决?
答案 0 :(得分:6)
Postgresql具有&#34;默认模式&#34;的概念,它是使用SEARCH_PATH设置的。它听起来像您正在连接的用户,因为没有配置。在Postgresql网站上查看Client Connection Defaults。
对于外键错误,当您使用带有schema
的显式Table
参数时,该名称也需要在ForeignKey
个对象中指定:
ForeignKey('myschema.mytable.id')