我很难让我的应用程序运行。每当我尝试将软件包中的模块分开时,Flask-SQLAlchemy扩展都会创建一个空数据库。为了更好地解释我在做什么,让我展示一下我的项目的结构:
Project
|
|-- Model
| |-- __init__.py
| |-- User.py
|
|-- Server
| |-- __init__.py
|
|-- API
| |-- __init__.py
这个想法很简单:我想为我的模型创建一个程序包,因为我不希望将代码分散在一个程序包中,而希望将代码分别放在各个“子”项目(如API)中,因为将来我将使用蓝图来更好隔离子应用。
代码很简单:
首先,Model.__init__.py:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
请注意,我创建此文件仅是为了SQLAlchemy()在整个包中使用单个对象。不,我们去Model.User
from Model import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(80))
Age = db.Column(db.Integer)
...
再次注意来自模型导入数据库的信息,该模型用于允许相同的数据库对象。
最后,Server.init.py像这样:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import Model, API
db = Model.db
def main():
app = Flask("__main__")
db = SQLAlchemy(app)
db.create_all()
API.SetAPIHookers(app)
app.run(host="0.0.0.0", port=5000, debug=True)
if __name__ == "__main__":
main()
从我的角度来看,db = SQLAlchemy(app)允许我传递我的应用程序对象而无需创建循环引用。
问题是,每当我运行此代码时,sqlite数据库文件都会被创建为空。那让我认为也许Python不会像我想的那样导入东西。因此,我通过删除导入模型并直接在Server中创建用户来测试我的理论……瞧瞧,它起作用了!
现在出现了我的问题:是否存在一种“ pythonic”方式来正确分离所需的模块,还是应该将所有内容都放在同一软件包中?