【Dv3admin】ORM數據庫無法查詢的問題

Django 運行過程中,數據庫連接的健康狀態直接影響應用的穩定性和數據訪問準確性。長時間空閑的數據庫連接經常因外部機制被回收,進而引發數據查詢異常和返回無效結果。

本文圍繞 Django 中數據庫連接長時間空閑導致的連接失效問題,介紹相關的背景成因,并給出配置與中間件層面的解決辦法,包括如何自動檢測與維護數據庫連接的可用性,保障項目高可用和穩定運行。

文章目錄

  • 應用場景
  • 實現方式
  • 總結

應用場景

Django 在運行過程中會維護自己的數據庫連接池。如果連接被長時間占用或者在網絡上處于空閑狀態,有些數據庫中間件、負載均衡器、云數據庫自身的連接管理機制(比如超時、空閑回收)會自動斷開這些連接。Django 并不會主動發現已有的連接已經失效,依然會用“假裝還活著”的連接去請求數據。這時候,實際查詢沒有真正訪問到數據庫,ORM 返回 None,而不是拋出數據庫連接異常。這種情況下,數據庫層的數據并沒有問題,只是 Django 進程用的連接已經失效,直到服務重啟,連接池被清空并重新建立連接,才又能正常查到數據。

PaymentOrderFinance.objects.filter(id=123).first()

這種現象背后的根本原因,通常與數據庫連接的“長時間空閑失效”有關。

  • 云數據庫有連接超時或空閑連接回收策略,斷掉了長時間未活躍的連接。
  • 網絡不穩定,導致連接短暫丟失又自動恢復,但 ORM 沒有感知到。
  • 負載均衡層或者中間件(比如 ProxySQL、云數據庫代理層)清理了“空閑連接”。

實現方式

可以在 Django 的數據庫配置中添加 CONN_MAX_AGE(連接最大存活時間),比如設置為 60 秒或者更短,讓 Django 自動定期重建連接,減少連接失效的概率。還可以用數據庫健康檢查機制,或者用中間件對查詢失敗做重試處理。
例如:

DATABASES = {'default': {# ...'CONN_MAX_AGE': 60,  # 單位為秒}
}

這樣 Django 會自動在每次查詢時判斷連接是否存活,超過設置時間會重連數據庫,從而避免這種“假死連接”導致的 None 返回。

并項目下新建中間件 db_keepalive.py 定義一個 Django 中間件類 EnsureDbConnectionMiddleware,用于每次 HTTP 請求到來時自動檢測并維護數據庫連接的可用性。具體來說,中間件在請求處理流程的最前面調用 connection.close_if_unusable_or_obsolete(),確保如果當前數據庫連接已經失效或變得不可用,就會自動關閉這個連接,避免后續操作因連接異常導致報錯。這樣可以減少數據庫連接因長時間空閑或網絡問題導致的不可用情況,保證后續每一次數據庫訪問時連接狀態都是健康的。這個中間件適用于需要高可用、穩定數據庫連接的場景,比如長時間運行的 Web 服務,能夠有效預防由于數據庫連接斷開引起的異常。

# coding:utf-8
'''
@IDE     :PyCharm 
@Project :ManageBak-HS.py 
@File    :db_keepalive.py
@Author  :Mr數據楊
@Date    :2025/7/25
@Desc    : 
'''from django.db import connectionclass EnsureDbConnectionMiddleware:def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):# 每次請求自動檢測數據庫連接connection.close_if_unusable_or_obsolete()response = self.get_response(request)return response

在 Django 項目的 settings.py 文件的 MIDDLEWARE 配置中,將這個中間件類添加到合適的位置后,即可實現對所有請求的數據庫連接健康管理,提升系統的健壯性和穩定性。

MIDDLEWARE = ["dvadmin.utils.middleware.ApiLoggingMiddleware", # 必須第一個.......
]

總結

數據庫連接因空閑被回收引發的失效現象,常見于云數據庫、負載均衡或網絡環境下,容易導致數據查詢異常。通過合理設置 CONN_MAX_AGE 參數和添加數據庫連接健康檢測中間件,可以有效降低“假死連接”產生的概率,提升查詢準確性和系統穩定性。

針對生產環境,建議結合實際場景持續優化數據庫連接管理策略,關注不同數據庫平臺的連接處理細節。未來,結合自動化健康監測與智能重連機制,有望進一步提升 Django 應用的高可用能力,減少因底層連接斷開帶來的潛在風險。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93549.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93549.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93549.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用 Flownex 對機械呼吸機進行建模

當患者無法獨立呼吸時,機械呼吸機通過氣管插管將富氧空氣輸送到患者的肺部。肺是敏感而復雜的器官,因此在無法忍受的壓力和體積范圍內提供空氣,根據每分鐘所需的呼吸次數計時,并適當加濕和加熱。機械呼吸機的精確建模對于其安全有…

力扣刷題日常(7-8)

力扣刷題日常(7-8) 第7題: 整數反轉(難度: 中等) 原題: 給你一個 32 位的有符號整數 x ,返回將 x 中的數字部分反轉后的結果. 如果反轉后整數超過 32 位的有符號整數的范圍 [?231, 231 ? 1] ,就返回 0. 假設環境不允許存儲 64 位整數(有符號或無符號).…

串口接收數據包(協議帶幀頭幀尾)的編程實現方法:1、數據包格式定義結構體2、使用隊列進行數據接收、校驗解包

這種帶幀頭幀尾的數據包處理流程可以簡單概括為 “識別邊界→提取有效數據→驗證完整性” 三個核心步驟,具體操作如下:1. 數據包格式定義(先約定規則)首先明確一個 “合格數據包” 的結構,比如: 幀頭&#…

JSON 對象封裝教程

JSON 對象封裝方法在 Java 中封裝 JSON 對象通常使用第三方庫&#xff0c;如 org.json、Gson 或 Jackson。以下是幾種常見的方法&#xff1a;使用 org.json 庫添加 Maven 依賴&#xff1a;<dependency><groupId>org.json</groupId><artifactId>json<…

【WRF-Chem】EDGAR 排放數據處理:分部門合并轉化為二進制(Python全代碼)

目錄 process.py process_biofl.py process_fossil.py process_micro.py process_sector.py 參考 process.py 讀取 EDGAR 排放數據庫中 2000 至 2023 年間不同行業的甲烷(CH?)排放數據,進行合并處理,并將總排放以二進制格式保存到文件中。 導入必要的庫 import numpy as n…

【學習過程記錄】【czsc】1、安裝

文章目錄 背景 安裝 安裝python 安裝czsc 功能測試 附錄 奇葩的報錯 背景 詳見: https://github.com/waditu/czsc 安裝 安裝python !重要!作者強調,python必須是大于等于3.8 為此呢,我也是花了一點時間裝了一個python3.13。 安裝czsc 關于czsc的安裝呢,官方也是給出…

Python批量生成N天前的多word個文件,并根據excel統計數據,修改word模板,合并多個word文件

1&#xff0c;需求 根據word模板文件&#xff0c;生成多個帶日期后綴的word文件根據excel-每日告警統計數量&#xff0c;逐個修改當日的文檔2&#xff0c;實現 shell腳本&#xff1a;根據word模板文件&#xff0c;生成多個帶日期后綴的word文件 #!/bin/bash # 生成近一年日期 …

基于uni-app的血糖血壓刻度滑動控件

想要做一個基于uni-app的血糖血壓刻度滑動控件&#xff0c;hbuilder市場沒有好的&#xff0c;參照別人的寫了一個。如圖&#xff1a;源碼&#xff0c;自己放入components里面。<!-- 刻度滑動選擇 --> <template><view><view class"slide-title"…

C語言(02)——標準庫函數大全(持續更新)

想要了解更多的C語言知識&#xff0c;可以訂閱下面的專欄&#xff0c;里面也有很多品質好文&#xff1a; 打怪升級之路——C語言之路_ankleless的博客-CSDN博客 還在持續更新中&#xff0c;以下是學習過程中遇到的一些庫函數&#xff08;排序不分先后&#xff09;&#xff1a…

永磁同步電機無速度算法--靜態補償電壓模型Harnefors觀測器

一、原理介紹本文基于Harnefors教授提出的靜態補償電壓模型&#xff0c;可以實現帶載零速啟動、正反轉切換等功能&#xff0c;原理清晰&#xff0c;實現簡便。二、仿真模型在MATLAB/simulink里面驗證所提算法&#xff0c;搭建仿真。采用和實驗中一致的控制周期1e-4&#xff0c;…

[SKE]Python gmssl庫的C綁定

Python gmssl庫的C綁定 摘要:本文展示gmssl庫的C綁定,并給出完整代碼。將參考模型從Python腳本遷移到純C代碼中使用gmssl庫(TongSuo項目,支持國密算法如SM4,同時兼容AES、DES、3DES、RSA等)。這樣,UVM(SystemVerilog)可以通過DPI-C直接調用C函數,而無需嵌入Py…

4.方法的使用

方法是指一段具有獨立功能的代碼塊&#xff0c;只有被調用時才會執行方法的主要作用體現在&#xff1a;代碼組織&#xff1a;將原本擠在一起的臃腫代碼按照功能進行分類管理例如&#xff1a;將用戶注冊的驗證邏輯、數據庫操作、結果返回等分離成不同方法提高復用性&#xff1a;…

day21-Excel文件解析

目錄 1. 概述 2. Apache POI 3. XSSF解析Excel文件 3.1. 添加Jar包依賴 3.2. Workbook&#xff08;Excel文件&#xff09; 3.2.2. 加載&#xff08;解析&#xff09;Excel文件 3.3. Sheet &#xff08;工作簿&#xff09; 3.3.1. 創建工作簿 3.3.2. 獲取工作簿 3.3.3.…

與 TRON (波場) 區塊鏈進行交互的命令行工具 (CLI): tstroncli

源碼倉庫 一個基于 Node.js 和 TypeScript 構建的&#xff0c;用于與 TRON (波場) 區塊鏈進行交互的命令行工具 (CLI)。 本項目旨在提供一個簡單、可擴展的框架&#xff0c;讓開發者可以輕松地通過命令行調用 TRON 的 HTTP API&#xff0c;實現查詢鏈上信息、發送交易等操作。…

rabbitmq--默認模式(點對點)

導入包&#xff1a;<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency>application.yml springrabbitmq:host: localhostport: 5672username: guestpassword: gue…

外網訪問文檔編輯器Docsify(Windows版本),內網穿透技術應用簡便方法

如果你正在為項目寫文檔&#xff0c;但又不想折騰復雜的構建流程&#xff0c;也不想維護一堆靜態 HTML 文件&#xff0c;那你一定要試試 docsify。docsify 是一個基于 JavaScript 的開源文檔生成工具&#xff0c;它最大的特點就是“無構建”&#xff1a;你只需要寫 Markdown 文…

第4章唯一ID生成器——4.5 美團點評開源方案Leaf

Leaf是美團點評公司基礎研發平臺推出的一個唯一ID生成器服務&#xff0c;其具備高可靠性、低延遲、全局唯一等特點&#xff0c;目前已經被廣泛應用于美團金融、美團外賣、美團酒旅等多個部門。Leaf根據不同業務的需求分別實現了Leaf-segment和Leaf-snowflake兩種方案&#xff0…

分布式搜索和分析引擎Elasticsearch實戰指南

ES 介紹與安裝 Elasticsearch&#xff0c; 簡稱 ES&#xff0c;它是個開源分布式搜索引擎&#xff0c;它的特點有&#xff1a;分布式&#xff0c;零配置&#xff0c;自動發現&#xff0c;索引自動分片&#xff0c;索引副本機制&#xff0c;restful 風格接口&#xff0c;多數據源…

【13】C# 窗體應用WinForm——.NET Framework、WinForm、工程創建、工具箱簡介、窗體屬性及創建

文章目錄1. WinForm工程創建 及 界面介紹1.1 WinForm工程創建1.2 窗體 Form1.cs “查看代碼”1.3 打開窗體設計器2. 工具箱3. 窗體屬性及創建3.1 窗體屬性3.2 實例&#xff1a;創建一個新窗體3.2.1 添加新Windows窗體3.2.2 窗體屬性配置3.2.3 設置該窗體為啟動窗體WinForm 是 W…

論文閱讀-IGEV

文章目錄1 概述2 模塊2.1 總體說明2.2 特征抽取器2.3 CGEV2.4 基于Conv-GRU的更新算子2.5 空間上采樣2.6 損失函數3 效果參考文獻1 概述 在雙目深度估計中&#xff0c;有一類是基于3D卷積的方法&#xff0c;代表就是PSMNet&#xff0c;它應用 3D 卷積編碼器-解碼器來聚合和正則…