簡體   English   中英

Flask Sqlalchemy:不同模塊之間的關系

[英]Flask Sqlalchemy : relationships between different modules

我正在遵循Flask-SQLAlchemy教程。 我在python 2.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'))

之后,我可以創建數據庫:

from DataBase.Tables.MyClass import db
db.create_all()

當兩個類都在同一文件上創建時,它會很好地工作。

當我想通過2個不同的文件(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:與列“ Address.person_id”相關聯的外鍵找不到表“ person”,通過該表生​​成指向目標列“ sid”的外鍵*

我可以找到其他人建議使用“元數據”的帖子,但找不到合適的使用方法。

有誰有辦法解決這個問題?

謝謝 !

您只需要具有以下一組,而不必為每個模型提供單獨的副本:

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

可以在一個單獨的模塊中定義它(將其稱為shared ),並將其導入每個模型定義文件中。
在這種情況下,主模塊將更像:

from DataBase.Tables.shared import db

if __name__ == "__main__":
    import DataBase.Tables.Person   # will load Person model into the db
    import DataBase.Tables.Address  # will load Address model into the db
    db.create_all() # will create all models

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM