Flask中無法在其他函數中查詢Sqlachemy的解決辦法

来源:https://www.cnblogs.com/huchong/archive/2018/07/31/9393633.html
-Advertisement-
Play Games

報錯信息部分截取: 錯誤根源: 排錯: 相信很多人都是這樣寫的init 文件的吧: 然後再叢manager啟動文件導入create_app 這樣寫了之後,那麼你就只能在視圖函數中執行資料庫操作了!!! 解決辦法: 方式一 直接實例化app 不要寫create_app函數了,在啟動文件中直接導入app ...


報錯信息部分截取:

 File "D:\python 3.5\lib\site-packages\flask_sqlalchemy\__init__.py", line 912, in get_app
    'No application found. Either work inside a view function or push'
RuntimeError: No application found. Either work inside a view function or push an application context. See http://flask-sqlalchemy.pocoo.org/contexts/.

錯誤根源:

class GroupForm(FlaskForm):
    '''分組表單'''
    menu_id = SelectField(label = "所屬菜單",validators = [DataRequired("請選擇菜單!")],coerce = int,
                         choices = [(v.id,v.name) for v in Menu.query.all()],render_kw = {"class":"form-control"})
#在form表單中執行了資料庫查詢操作,就會出現報錯,後面發現只有在視圖函數中執行資料庫查詢操作才不會報錯(出了視圖函數外的其他地方都不好使)                      

排錯:

相信很多人都是這樣寫的init 文件的吧:

from flask_sqlalchemy import SQLAlchemy
from flask import Flask
from config import Config
db = SQLAlchemy()
def create_app():
    app = Flask(__name__)
    app.config.from_object(Config)
    Config.init_app(app)
    db.init_app (app)
    from .admin import admin as admin_blueprint
    app.register_blueprint(admin_blueprint,url_prefix = '/admin')
    return app

然後再叢manager啟動文件導入create_app

from flask_script import Manager
from app import create_app,db
app = create_app()
from flask_migrate import MigrateCommand,Migrate
manage = Manager(app)
migrate = Migrate(app,db)
manage.add_command('db',MigrateCommand)
if __name__ == '__main__':
    app.run()

這樣寫了之後,那麼你就只能在視圖函數中執行資料庫操作了!!!

解決辦法:

方式一 直接實例化app 不要寫create_app函數了,在啟動文件中直接導入app對象:

from flask_sqlalchemy import SQLAlchemy
from flask import Flask
app = Flask(__name__)
from config import Config
app.config.from_object(Config)
Config.init_app(app)
db = SQLAlchemy(app)
from .models import Auth,Role,User,Group,Menu

from .admin import admin as admin_blueprint
app.register_blueprint(admin_blueprint,url_prefix = '/admin')

方式二 如果你要你的表單中使用資料庫查詢,那麼可以換種方式已達到同樣的效果

class GroupForm(FlaskForm):
    '''分組表單'''
    menu_id = SelectField(label = "所屬菜單",validators = [DataRequired("請選擇菜單!")],coerce = int,
                         choices = "",render_kw = {"class":"form-control"})

#然後在你的視圖函數中實例化這個Form 類的時候給它賦值
    form = MenuForm()
    if request.method == "GET":
        form.menu_id.choices = [(v.id,v.name) for v in Menu.query.all ()]

#或者你也可以在你的Form類中寫一個init方法
class GroupForm(FlaskForm):
    '''分組表單'''
     menu_id = SelectField(label = "所屬菜單",validators = [DataRequired("請選擇菜單!")],coerce = int,
                         choices = "",render_kw = {"class":"form-control"})

     def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.menu_id.choices = [(v.id,v.name) for v in Menu.query.all()]
        

問題解決

轉自:https://blog.csdn.net/zhongqiushen/article/details/79162792

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • https://mp.weixin.qq.com/s/Co1LxS2h_ILh9syOmshjZg 什麼是CGI CGI全稱是“公共網關介面”(Common Gateway Interface),HTTP伺服器與你的或其它機器上的程式進行“交談”的一種工具,其程式須運行在網路伺服器上。 CGI可以用 ...
  • 分數的表示 1.如果分數為負,負號放到分子上 2.如果分數為0,分子為0,分母為1 3.分子分母沒有除1以為的公約數(化簡) 分數的化簡 分三步: 1.調整分子分母的負號 2.處理分數為0的情況 3.約分:分子分母絕對值的最大公約數。 ...
  • C++的註釋有兩種 1. 雙斜杠開始到本行結束 (//) 2. 斜杠星開始 星斜杠結束 (/*)(*/) 我們把上次的代碼加上一個比較詳細的註釋。 註釋的目的: 讓代碼閱讀者更清晰的理解編碼者的代碼意義。 註釋的一種錯誤用法 ,/* */的嵌套使用 大家看一下代碼著色就能發現,嵌套使用後的註釋對會出 ...
  • 題意 交互題。 有$k$個值域為$[1, n]$的數。 請在不超過$60$次詢問內找出其中的兩個數。 每次詢問形式為1 x y 交互庫會返回$|x - a| <= |y - b| ? "TAK" : "NIE"$ 其中$a, b$分別是使得$|x - a|,|y - b|$最小的且存在於序列中的數。 ...
  • 父類 子類 測試類 設計思想:用隨機文件流把文件正向讀出並保存到了字元串中,將字元串倒序,顯示到控制台。 文件讀寫 目的 1 掌握文件讀寫的幾種方法 2 FileOutputStream和FileInputStream類的使用。 3 基本數據類型之間的轉換 實現文件讀取後轉換為大寫後寫入到目標文件中 ...
  • 創建實例: String str = new String();str = "String"; 1、char charAt(int index):返回指定索引位置的字元 2、String substring(int beginIndex):返回指定起始位置至字元串末尾的字元串 String subs ...
  • 前言 從文章的標題,就可以清晰地瞭解到,本文是來辨析三個容易將新手弄糊塗的技術名詞。如果,你一眼看過去就知道這三個名詞的區別及關係,那麼,這篇文章你可以不用繼續讀下去了;除非,你是想要看看我有什麼解釋的不對,來糾錯的(來找茬,哈哈),也歡迎留言。 名詞解釋 JPA(Java Persistence ...
  • 本文內容 OID查詢 對象導航查詢 HQL查詢 QBC查詢 SQL查詢 首發日期:2018-07-31 hibernate的查詢方式: hibernate有很多查詢方式 OID查詢 對象導航查詢: HQL查詢: QBC查詢: SQL查詢: OID查詢: OID查詢:基於唯一標識屬性(主鍵)來查詢 使... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...