国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

flask-sqlalchemy結(jié)合Blueprint遇到循環(huán)引入問(wèn)題的解決方案

這篇具有很好參考價(jià)值的文章主要介紹了flask-sqlalchemy結(jié)合Blueprint遇到循環(huán)引入問(wèn)題的解決方案。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

想要用flask_sqlalchemy結(jié)合Blueprint分模塊寫(xiě)一下SQL的增刪改查接口,結(jié)果發(fā)現(xiàn)有循環(huán)引入問(wèn)題。

一開(kāi)始,我在app.py中使用db = SQLAlchemy(app)創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象;并且使用app.register_blueprint(db_bp, url_prefix='/db')注冊(cè)藍(lán)圖。

這使得我的依賴關(guān)系是這樣的。db.py → app,py 中的db對(duì)象;app.py → db,py 用于注冊(cè)藍(lán)圖,產(chǎn)生了循環(huán)引用。

接著我學(xué)著使用一個(gè)model.py來(lái)存放db變量,但是使用錯(cuò)誤,下面是錯(cuò)誤的示例。

我在model.py使用db = SQLAlchemy()創(chuàng)建了未注冊(cè)的db對(duì)象

在app.py中使用db.init_app(app)來(lái)連接數(shù)據(jù)庫(kù),注冊(cè)db對(duì)象

但在db.py中錯(cuò)誤引用了app.py中的db對(duì)象,再次產(chǎn)生了循環(huán)引用

解決方法,在db.py中引入model.py中的db對(duì)象即可。

此時(shí)的依賴關(guān)系如下,db.py和app.py → model.py 用于獲取db對(duì)象;app.py → db.py 用于注冊(cè)藍(lán)圖。

?

看到一些比較麻煩的解決方案,1. 把db變量變成一個(gè)web接口,用請(qǐng)求的方式獲取。

2. 把a(bǔ)pp注冊(cè)db和blueprint的操作都放入main函數(shù)中?;蛘撸确庋b到def create_app()函數(shù)中,然后在main函數(shù)中調(diào)用。

參考?使用Flask-SQLAlchemy和Blueprints循環(huán)導(dǎo)入db引用 | 那些遇到過(guò)的問(wèn)題

?

dao.py

from flask import Blueprint, request, jsonify
from models import db
from models import KnowledgeEntity
from sqlalchemy.exc import SQLAlchemyError


# 創(chuàng)建視圖函數(shù)藍(lán)圖
app = Blueprint('KnowledgeDAO', __name__)

'''
word = db.Column(db.String(255), primary_key=True)
content = db.Column(db.Text, unique=True, nullable=False)
priority = db.Column(db.String(255), unique=True, nullable=False)
association = db.Column(db.JSON, unique=True, nullable=False)
'''


# 創(chuàng)建用戶
@app.route('/add', methods=['POST'])
def create_user():
    data = request.get_json()
    word = data.get('word')
    content = data.get('content')
    priority = data.get('priority')
    association = data.get('association')

    if not word or not priority:
        return jsonify({'message': 'Both word and priority are required'}), 400

    entity = KnowledgeEntity(word=word, content=content, priority=priority, association=association)

    try:
        db.session.add(entity)
        db.session.commit()
        return jsonify(1), 201
    except SQLAlchemyError as e:
        db.session.rollback()  # 回滾事務(wù)以撤銷之前的操作
        error_message = str(e)
        return f'Error: {error_message}', 500


# 查詢所有用戶
@app.route('/selectAll', methods=['POST'])
def get_users():


    users = KnowledgeEntity.query.all()
    print('users',users)
    # user_list = [{'id': user.id, 'username': user.username, 'email': user.email} for user in users]
    return jsonify(1)

?model.py

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class KnowledgeEntity(db.Model):
    __tablename__ = 'knowledge'
    word = db.Column(db.String(255), primary_key=True)
    content = db.Column(db.Text, unique=True, nullable=False)
    priority = db.Column(db.String(255), unique=True, nullable=False)
    association = db.Column(db.JSON, unique=True, nullable=False)

    def __init__(self, word, content=None, priority=None, association=None):
        self.word = word
        self.content = content
        self.priority = priority
        self.association = association

?app.py(改進(jìn)后的)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-729289.html

from flask import Flask, request, jsonify,g
from flask_cors import CORS
from flask_sqlalchemy import SQLAlchemy
from models import db
# 導(dǎo)入視圖函數(shù)
from DAO import KnowledgeDAO

app = Flask(__name__)
# 配置選項(xiàng),用于控制 Flask 在將 Python 字典轉(zhuǎn)換為 JSON 數(shù)據(jù)時(shí)是否按照鍵的字母順序?qū)︽I進(jìn)行排序,默認(rèn)情況下,它的值為 True,表示會(huì)對(duì)鍵進(jìn)行排序。
app.config['JSON_SORT_KEYS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@127.0.0.1:3306/ennote'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# 注冊(cè)跨域
CORS(app, resources=r'/*')  # 注冊(cè)CORS, "/*" 允許訪問(wèn)所有api

# 連接數(shù)據(jù)庫(kù)
db.init_app(app)

# 注冊(cè)藍(lán)圖
app.register_blueprint(KnowledgeDAO.app, url_prefix='/knowledge')

if __name__ == '__main__':


    # 創(chuàng)建應(yīng)用上下文
    with app.app_context():
        # 在這里執(zhí)行需要應(yīng)用上下文的操作
        # 例如,訪問(wèn)數(shù)據(jù)庫(kù)或使用Flask的全局變量
        db.create_all()

    app.run(host='127.0.0.1', port=5000, debug=True)


到了這里,關(guān)于flask-sqlalchemy結(jié)合Blueprint遇到循環(huán)引入問(wèn)題的解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 3.flask-sqlalchemy ORM庫(kù)

    Flask-SQLAlchemy是一個(gè)用于Flask的擴(kuò)展,它提供了一個(gè)便捷的方式來(lái)處理數(shù)據(jù)庫(kù)操作。Flask-SQLAlchemy基于SQLAlchemy,一個(gè)功能強(qiáng)大的Python SQL工具包和對(duì)象關(guān)系映射(ORM)系統(tǒng) 官網(wǎng)文檔: http://www.pythondoc.com/flask-sqlalchemy/ 一對(duì)多關(guān)系是指一個(gè)模型與另一個(gè)模型之間存在多對(duì)一的關(guān)系。在

    2024年02月10日
    瀏覽(30)
  • Flask-sqlalchemy更新數(shù)據(jù)庫(kù)

    Flask-sqlalchemy更新數(shù)據(jù)庫(kù)

    Flask開(kāi)發(fā)過(guò)程中,難免不會(huì)在開(kāi)發(fā)工程中修改數(shù)據(jù)庫(kù)信息,如添加字段,修改字段類型等,F(xiàn)lask可以通過(guò)擴(kuò)展庫(kù)flask-migrate來(lái)更新DEBUG中的工程數(shù)據(jù)庫(kù),更新數(shù)據(jù)庫(kù)步驟如下: 1、首先需要安裝flask_migrate,pip install flask_migrate 2、因?yàn)閒lask_sqlalchemy是通過(guò)終端命令更新,所以需要f

    2023年04月08日
    瀏覽(15)
  • flask-sqlalchemy連接數(shù)據(jù)庫(kù)

    flask-sqlalchemy連接數(shù)據(jù)庫(kù)

    1、安裝flask_sqlalchemy和pymysql包 2、進(jìn)行配置 使用Flask-SQLAlchemy擴(kuò)展操作數(shù)據(jù)庫(kù),首先需要通過(guò)URL建立數(shù)據(jù)庫(kù)連接,必須保存到Flask配置對(duì)象的SQLALCHEMY_DATABASE_URI中。 其中HOSTNAME為路由地址 PORT為端口號(hào),我在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)沒(méi)有更改,所以用的默認(rèn)的3306端口號(hào) DATABASE為數(shù)據(jù)庫(kù)名字

    2024年02月06日
    瀏覽(28)
  • flask中的操作數(shù)據(jù)庫(kù)的插件Flask-SQLAlchemy

    flask中的操作數(shù)據(jù)庫(kù)的插件Flask-SQLAlchemy

    Web 開(kāi)發(fā)中,一個(gè)重要的組成部分便是數(shù)據(jù)庫(kù)了。Web 程序中最常用的莫過(guò)于關(guān)系型數(shù)據(jù)庫(kù)了,也稱 SQL 數(shù)據(jù)庫(kù)。另外,文檔數(shù)據(jù)庫(kù)(如 mongodb)、鍵值對(duì)數(shù)據(jù)庫(kù)(如 redis)近幾年也逐漸在 web 開(kāi)發(fā)中流行起來(lái),我們習(xí)慣把這兩種數(shù)據(jù)庫(kù)稱為 NoSQL 數(shù)據(jù)庫(kù)。 大多數(shù)的關(guān)系型數(shù)據(jù)庫(kù)引

    2024年02月09日
    瀏覽(33)
  • 快速上手Flask(三) 在 Flask應(yīng)用中使用Flask-SQLAlchemy(flask SQLAlchemy模型對(duì)象如何json序列化輸出)

    常見(jiàn)情況下對(duì)于只有一個(gè) Flask 應(yīng)用,所有您需要做的事情就是創(chuàng)建 Flask 應(yīng)用,選擇加載配置接著創(chuàng)建 SQLAlchemy 對(duì)象時(shí)候把 Flask 應(yīng)用傳遞給它作為參數(shù)。 官網(wǎng):https://www.sqlalchemy.org/ 參考本人 文章:python常用庫(kù)之?dāng)?shù)據(jù)庫(kù)orm框架之SQLAlchemy 官方文檔: 中文: http://www.pythondoc.co

    2024年01月25日
    瀏覽(31)
  • 如何使用Flask-SQLAlchemy來(lái)管理數(shù)據(jù)庫(kù)連接和操作數(shù)據(jù)?

    首先,我們需要安裝Flask-SQLAlchemy。你可以使用pip來(lái)安裝它,就像這樣: 好了,現(xiàn)在我們已經(jīng)有了一個(gè)可以操作數(shù)據(jù)庫(kù)的工具,接下來(lái)讓我們來(lái)看看如何使用它吧! 首先,我們需要?jiǎng)?chuàng)建一個(gè)Flask應(yīng)用對(duì)象,并配置數(shù)據(jù)庫(kù)的連接字符串和師: 現(xiàn)在,我們已經(jīng)創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù),

    2024年02月15日
    瀏覽(46)
  • python:使用Flask-SQLAlchemy對(duì)數(shù)據(jù)庫(kù)增刪改查的簡(jiǎn)單示例

    python:使用Flask-SQLAlchemy對(duì)數(shù)據(jù)庫(kù)增刪改查的簡(jiǎn)單示例

    以下將介紹Flask-SQLAlchemy對(duì)數(shù)據(jù)庫(kù)增刪改查的簡(jiǎn)單示例。 一、安裝所需的庫(kù) pip install flask flask-sqlalchemy flask-mysql 二、創(chuàng)建數(shù)據(jù)表 本示例使用mysql創(chuàng)建數(shù)據(jù)庫(kù)和表 CREATE TABLE `user` ( ? `id` int(11) NOT NULL AUTO_INCREMENT, ? `name` varchar(255) DEFAULT NULL, ? `age` int(11) DEFAULT NULL, ? PRIMARY KEY (`id

    2024年02月07日
    瀏覽(36)
  • flask---》更多查詢方式/連表查詢/原生sql(django-orm如何執(zhí)行原生sql)/flask-sqlalchemy

    sqlalchemy執(zhí)行原生sql django執(zhí)行原生sql

    2024年02月13日
    瀏覽(23)
  • Flask從入門(mén)到放棄五(SQLAlchemy介紹與快速使用、創(chuàng)建表插入數(shù)據(jù)、Scoped_session線程安全、基本增刪查改、表模型、Flask-SQLAlchemy、Migrate的使用)

    Flask從入門(mén)到放棄五(SQLAlchemy介紹與快速使用、創(chuàng)建表插入數(shù)據(jù)、Scoped_session線程安全、基本增刪查改、表模型、Flask-SQLAlchemy、Migrate的使用)

    SQLAlchemy是一個(gè)基于Python實(shí)現(xiàn)的ORM框架。該框架建立在 DB API之上,使用關(guān)系對(duì)象映射進(jìn)行數(shù)據(jù)庫(kù)操作,簡(jiǎn)言之便是:將類和對(duì)象轉(zhuǎn)換成SQL,然后使用數(shù)據(jù)API執(zhí)行SQL并獲取執(zhí)行結(jié)果。 SQLAlchemy的組成部分有: Engine 框架的引擎 Connection Pooling 數(shù)據(jù)庫(kù)連接池 Dialect 選擇連接數(shù)據(jù)庫(kù)的

    2024年02月04日
    瀏覽(26)
  • 【flask sqlalchmey】一次性將返回的列表對(duì)象或者 一行數(shù)據(jù)對(duì)象轉(zhuǎn)成dict---flask-sqlalchemy輸出json格式數(shù)據(jù)

    結(jié)果示例: 另外: res = Sysdict.query.all() 這種寫(xiě)法已經(jīng)不被推薦了, 推薦的是scalar_one() 獲取一行,scalars()獲取多行 user = db.session.execute(db.select(User).filter_by(username=username)).scalar_one() users = db.session.execute(db.select(User).order_by(User.username)).scalars() 一般的 json.dumps(users) 或者 jsonify(use

    2024年02月13日
    瀏覽(80)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包