首页 > 解决方案 > flask_SQLAlchemy 和蓝图

问题描述

我是 Python 新手,我一直在学习一些教程,现在我正在尝试自己创建一个带有 API 的网站。我正在使用 Flask、Flask_SQLAlchemy 和 Blueprints,并且我试图创建一个只能由 API 访问的 SQLite3 数据库。(我还有其他名为 site 和 admin= 的蓝图

这是我的文件结构(仅适用于 API 部分,我认为站点和管理结构不相关,如果我错了请告诉我):

hspmng/
+-- run.py
+-- app/
    +-- __init__.py
    +-- api/
        +-- __init___.py
        +-- routes.py

代码:

/hspmng/run.py

from app import app
app.run (debug=True)

/hspmng/app/__init__.py

from flask import Flask
from app.api.routes import mod
from app.site.routes import mod
from app.admin.routes import mod

app = Flask(__name__)
app.register_blueprint(api.routes.mod, url_prefix='/api')
app.register_blueprint(site.routes.mod)
app.register_blueprint(admin.routes.mod, url_prefix='/admin')

/hspmng/app/api/__init__.py

文件为空

/hspmng/app/api/routes.py

我的想法是为创建数据库创建一个不同的文件,但我将它放入路由中只是为了测试它。

from flask import Blueprint
from flask_sqlalchemy import SQLAlchemy

mod = Blueprint('api', __name__)

mod.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
mod.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqllite3'

db = SQLAlchemy(mod)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    location = db.Column(db.String(50))


@mod.route('/getStuff')
def getStuff():
    return '<p>API</p>'

数据库创建

要创建数据库,我在命令行中运行 python 并输入以下内容

from app import db

我收到以下错误

>>> from app import db
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/mnt/d/Projects/hspmng/app/__init__.py", line 2, in <module>
    from app.api.routes import mod
  File "/mnt/d/Projects/hspmng/app/api/routes.py", line 5, in <module>
    mod.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
AttributeError: 'Blueprint' object has no attribute 'config'

你能帮助我吗?

标签: pythonflaskflask-sqlalchemy

解决方案


将以下两行从您设置配置的"app/____init___.py"位置移到您创建app对象的位置。
config不是Blueprint类的一部分,它是您的 Flask 应用程序对象的一部分。

mod.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
mod.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqllite3'

"app/__init__.py"你应该做的。

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqllite3'

这是为了让您的数据库 URL 存在于应用程序上下文中,以便您的所有蓝图都可以访问它。

您可以在此处查看更多详细信息:http Flask.config: //flask.palletsprojects.com/en/1.1.x/api/#flask.Flask.config


推荐阅读