Yac*_*ace 4 python sqlalchemy relationship flask flask-sqlalchemy
我正在遵循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'))
Run Code Online (Sandbox Code Playgroud)
之后,我可以创建数据库:
from DataBase.Tables.MyClass import db
db.create_all()
Run Code Online (Sandbox Code Playgroud)
当两个类都在同一文件上创建时,它会很好地工作。
当我想通过2个不同的文件(2个不同的模块)创建此文件时,它将不再起作用。
这只是一个示例(我正在尝试使用很多类来做更复杂的事情,并且我需要在两个不同模块之间存在这种关系,但是我会简化它,以便使我的问题更容易理解。)
我有2个模块:人员和地址,它们都有:
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///C:\\MyBase\\Base.sqlite'
db = SQLAlchemy(app)
Run Code Online (Sandbox Code Playgroud)
并且每个人都有之前编写的类的声明。
我的主要功能在第三个模块中:
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()
Run Code Online (Sandbox Code Playgroud)
我仍然在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)
Run Code Online (Sandbox Code Playgroud)
可以在一个单独的模块中定义它(将其称为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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2908 次 |
| 最近记录: |