ORM基礎

来源:https://www.cnblogs.com/pythonav/p/18199684
-Advertisement-
Play Games

APCu 極簡概括: PHP 的開源記憶體緩存擴展,類比Redis,但是一般都用Redis,所以APCu用的很少。 官方文檔:https://www.php.net/manual/zh/apcu.configuration.php 解決問題:類比Redis做緩存組件,提升性能,同步數據使用。 適用場景 ...


ORM(Object Relational Mapping)是對象-關係-映射的簡稱。

ORM是MVC框架中的重要的部分。它實現了數據模型與資料庫的解耦,即數據模型的設計不需要依賴於特定的資料庫,通過簡單的配置就可以輕鬆更換資料庫,這極大的減輕了開發人員的工作量

在ORM中,有三種對應關係:

  • 類對應表
  • 類屬性對應表欄位
  • 類對象對應表記錄

如何在Django中使用ORM

  • 1.創建對象映射關係,即創建模型類,其實就是在app下的models.py中,以類和屬性的形式定義表的欄位
    models.py

    from django.db import models
    
    class User(models.Model):
          username = models.CharField(max_length=32, verbose_name='用戶名')
           
         # 當輸出對象時候自動輸出相應對象(記錄)的用戶名【純是輸出對象為了好看哈哈哈】
          def __str__(self):
               return self.username 
    
  • 2.配置資料庫連接,並且有了關係映射關係,這個時候就可以通過命令在資料庫中生成具體表了
    db.sqlite3配置
    dj.sqlite3是django中的集成資料庫,在settings中配置好的,適合測試環境用【適用於數據量小的時候】

    DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.sqlite3',
              'NAME': BASE_DIR / 'db.sqlite3',
          }
      }
    

    mysql配置
    首先安裝用於連接mysql的模塊

    pip install pymysql
    

    然後添加配置,在與項目同名目錄中的__init__.py添加以下代碼

    import pymysql
    pymysql.install_as_MySQLdb()
    

    接下來,就需要手動在mysql中手動創建資料庫啦
    然後,連接mysql還需要再Django中的settings中配置一下

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'day07',    		#你的資料庫名稱
            'USER': 'root',   		#你的資料庫用戶名
            'PASSWORD': '123', 	#你的資料庫密碼
            'HOST': '', 			#你的資料庫主機,留空預設為localhost
            'PORT': '3306', 		#你的資料庫埠
        }
    } 
    
    

    由於ORM會將ORM語句轉換成原生sql語句,可能有些SQL不符合我們的預期,所以這個日誌配置,用來查看 ORM到底將語句轉換成什麼,方便我們排查

    如果想查看ORM轉換為的sql語句,可以在settings中配置

    LOGGING = {
     'version': 1,
     'disable_existing_loggers': False,
     'handlers': {
         'console':{
             'level':'DEBUG',
             'class':'logging.StreamHandler',
         },
     },
     'loggers': {
         'django.db.backends': {
             'handlers': ['console'],
             'propagate': True,
             'level':'DEBUG',
             },
       }
    }
    

    也可以為每個app單獨配置資料庫,可以在settings中配置

    DATABASES = {
      'default': {
          'ENGINE': 'django.db.backends.mysql',
          'NAME':'bms',           # 要連接的資料庫,連接前需要創建好
          'USER':'root',        # 連接資料庫的用戶名
          'PASSWORD':'',        # 連接資料庫的密碼
          'HOST':'127.0.0.1',       # 連接主機,預設本級
          'PORT':3306            #  埠 預設3306
      },
      'app01': { #可以為每個app都配置自己的數據,並且資料庫還可以指定別的,也就是不一定就是mysql,也可以指定sqlite等其他的資料庫
          'ENGINE': 'django.db.backends.mysql',
          'NAME':'bms',           # 要連接的資料庫,連接前需要創建好
          'USER':'root',        # 連接資料庫的用戶名
          'PASSWORD':'',        # 連接資料庫的密碼
          'HOST':'127.0.0.1',       # 連接主機,預設本級
          'PORT':3306            #  埠 預設3306
      }
    

}

  • 3.資料庫遷移,只需要執行兩個命令就可以
     python manage.py makemigrations   # 用來讀取你在modesl.py中的類和屬性,創建資料庫的映射關係【生成文件】
     python manage.py migrate  # 讀取映射關係文件,在資料庫中生成相應的表
    
    上述命令會將所有的APP(settings中的INSTALLED_APPS中的app)中的models.py的映射類,真正的在數 據庫中創建相應的表。但是也可能有失敗的時候,那麼我們就要強制執行資料庫遷移命令:
    python manage.py migrate your_app_name --database your_app_name 
    
    上述操作,僅適用於連接mysql
    註意點
    • Django為了區分某個表屬於某個應用,創建的表都是以應用名加下劃線加表名的形式,如上述的UserInfo表,Django會創建成app01_userinfo

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

-Advertisement-
Play Games
更多相關文章
  • 當某些合作商希望把你的keycloak作為他們的一種第三方登錄方式時,就像微信,google,github,使用你的keycloak上的賬戶資源時,你就需要考慮如何做一個開放的,標準的文檔了。 一 基本角色 認證提供者:keycloak服務,https://kc.xxx.com 第三方應用:先到ke ...
  • 本文深入探討了Kubernetes中的Pod調度機制,包括基礎概念、高級調度技術和實際案例分析。文章詳細介紹了Pod調度策略、Taints和Tolerations、節點親和性,以及如何在高流量情況下優化Pod調度和資源管理。 關註【TechLeadCloud】,分享互聯網架構、雲服務技術的全維度知識 ...
  • PPT是傳遞信息、進行彙報和推廣產品的重要工具。然而,有時我們需要將這些精心設計的PPT演示文稿發佈到網路上,以便於更廣泛的訪問和分享。本文將介紹如何使用Python將PowerPoint文檔轉換為網頁友好的HTML格式。包含兩個簡單示例: Python 將PowerPoint文檔轉為HTML格式 ...
  • 項目基於 Spring Boot 3.2.5 Pom 需要註意的是,引用 Mybatis-Plus 依賴,無需手動引入 Mybatis <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j --> <dependenc ...
  • 簡介 waynboot-mall 是一套全部開源的 H5 商城項目,包含運營後臺、H5 商城前臺和後端介面三個項目 。實現了一套完整的商城業務,有首頁展示、商品分類、商品詳情、sku 詳情、商品搜索、加入購物車、結算下單、支付寶/微信支付/易支付對接、我的訂單列表、商品評論等一系列功能 。 ...
  • 主要用於去除圖片的白邊和黑邊,比如在截圖表情包的時候,通過小米的傳送門保存圖片的時候,圖片往往會有黑邊和白邊,此時使用此腳本二次處理 import os from PIL import Image, ImageChops def trim_white_border(image): bg = Imag ...
  • novel —— 一套基於 Spring Boot3 + Vue3 開發的前後端分離學習型小說項目。由小說門戶系統、作家後臺管理系統、平臺後臺管理系統等多個子系統構成。 ...
  • 1. Spring 對於事務上的應用的詳細說明 @目錄1. Spring 對於事務上的應用的詳細說明每博一文案2. 事務概述3. 引入事務場景3.1 第一步:準備資料庫表3.2 第二步:創建包結構3.3 第三步:準備對應資料庫映射的 Bean 類3.4 第四步:編寫持久層3.5 第五步:編寫業務層3 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...