Flask Sqlalchemy: 不同模块之间的关系

2024-03-29 00:31:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我遵循烧瓶SQLAlchemy教程。 我在Python2.6上有Flask 0.9、sqlalchemy 0.7.8和Flask sqlalchemy 0.16。在

我正在尝试建立一种“一对多”的关系,就像他们的教程中那样。在

class Person(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    addresses = db.relationship('Address', backref='person',
                                lazy='dynamic')

class Address(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(50))
    person_id = db.Column(db.Integer, db.ForeignKey('person.id'))

之后,我可以创建数据库:

^{pr2}$

当两个类都在同一个文件中创建时,它可以很好地工作。在

当我想通过2个不同的文件(2个不同的模块)创建这个文件时,它不再工作了。在

这只是一个示例(我试图用大量的类来做更复杂的事情,我需要两个不同模块之间的关系存在,但我会简化它,以便我的问题更容易理解。)

我有两个模块:人员和地址,这两个模块都有:

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///C:\\MyBase\\Base.sqlite'
db = SQLAlchemy(app)

每个人都有之前写的班级声明。在

我的主要功能是在第三个模块中:

from DataBase.Tables.Person import db as person_db
from DataBase.Tables.Address import db as address_db

if __name__ == "__main__":
    import DataBase.Tables.Person
    import DataBase.Tables.Address
    person_db.create_all()
    address_db.create_all()

在Eclipse中我仍然收到一个错误:

在*sqlalchemy.exc.NoReferencedTableError:与列关联的外键'地址。个人身份证'找不到表'person',用它生成目标列'sid'的外键*

我可以找到另一个帖子,有人建议使用“元数据”,但我找不到一个合适的方法来使用它。在

有人有办法解决这个问题吗?在

谢谢!在


Tags: 模块文件nameimportidflaskdbtables
1条回答
网友
1楼 · 发布于 2024-03-29 00:31:50

您只需要有以下一组,而不是每个型号都有一个单独的副本:

app = Flask(my_app_name)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///C:\\MyBase\\Base.sqlite'
db = SQLAlchemy(app)

这可以在单独的模块中定义(我们称之为shared),并导入到每个模型定义文件中。
在这种情况下,主模块看起来更像:

^{pr2}$

相关问题 更多 >