ORM基礎

清风拂山岗(小高同学)發表於2024-05-20

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

相關文章