繁体   English   中英

AttributeError:模块 'api.db' 在 Flask 上没有属性 '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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM