[英]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.