[英]Flask-SQLAlchemy. AttributeError: module '<…>.db' has no attribute 'Model'
[英]AttributeError: module 'api.db' has no attribute 'Model' on Flask
您好我有以下文件夹结构
.
├── api
│ ├── users
│ │ ├── __init__.py
│ │ ├── model.py
│ │ └── routes.py
│ ├── |__init__.py
├── __init__.py
├── requirements.txt
└── server.py
在api.__init__.py
我有以下代码:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from api import users
from flask_restful import Api
db = SQLAlchemy()
def create_app(env):
app = Flask(__name__)
db.init_app(app)
api = Api(app)
users.register_routes(api)
return app
在users/model.py
我有以下代码:
from sqlalchemy import Column, Integer, String
from .. import db
class User(db.Model):
__tablename__ = 'users'
...
在server.py
我有以下代码:
import os
from api import create_app
app = create_app(os.getenv("ENV"))
if __name__ == "__main__":
app.run(port=os.getenv("PORT"), debug=os.getenv("DEBUG")=='True')
问题是当我执行 server.py 时出现以下错误:
AttributeError:模块“api.db”没有属性“模型”
我该如何解决这个错误?
谢谢
我建议您对项目结构进行一些更改以避免循环导入问题,并且更喜欢将您的应用程序导入为 package 而不是作为模块,并且作为一种良好做法__init __.py
仅用于import
和一些metadata
,如__author__
和__version__
api
.. errors (blueprint)
.. __init__.py
.. routes.py
.. users (blueprint)
.. __init__.py
.. model.py
.. routes.py
.. extensions.py
.. __init__.py
.. app.py (here where your define "create_app()" function)
server.py
requirements.txt
在api/users/__init __.py
:
from .routes import bp
在api/users/models.py
:
from api.extensions import db
# from sqlalchemy import Column, Integer, String # You don't need this since you already imported the db oject
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True) # here
...
在api/users/routes.py
:
from flask import Blueprint, request, jsonify ..
from api.extensions import db # maybe you need it here
from .models import User # Your model
bp = Blueprint('users', __name__) # instantiate your 'users' Blueprint
@bp.route('/', methods=['GET', 'POST'])
def index():
..
return jsonify(..)
在/api/extensions.py
中,定义您的应用所需的Flask
扩展
from flask_sqlalchemy import SQLAlchemy
..
db = SQLAlchemy()
..
在/api/__init __.py
:
from .app import create_app
在/api/app.py
中:
from flask import Flask
..
def create_app(config_object):
"""Create a Flask application using the app factory pattern."""
app = Flask(__name__)
"""Load configuration."""
# app.config.from_object(CONFIGS[config_object]) # an example
..
"""Init app extensions."""
from .extensions import db
db.init_app(app)
..
"""Register blueprints."""
from .errors import bp as errors_bp
app.register_blueprint(errors_bp)
from .users import bp as users_bp
app.register_blueprint(users_bp, url_prefix='/users')
..
return app
在/server.py
中:
import os
from api import create_app
app = create_app(os.getenv("ENV", "development"))
if __name__ == "__main__":
app.run(port=os.getenv("PORT", 5000), debug=os.getenv("DEBUG", True)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.