动态

详情 返回 返回

Django學習(2)——ORM - 动态 详情

1.什麼是ORM

對象關係映射(Object Relational Mapping,簡稱 ORM )用於實現面向對象編程語言裏不同類型系統的數據之間的轉換。
ORM 在業務邏輯層和數據庫層之間充當了橋樑的作用。ORM 是通過使用描述對象和數據庫之間的映射的元數據,將程序中的對象自動持久化到數據庫中。
Django 模型使用自帶的 ORM。

1.1 使用ORM 的優點:

  • 提高開發效率。
  • 不同數據庫可以平滑切換。

1.2使用ORM 的缺點:

  • ORM 代碼轉換為 SQL 語句時,需要花費一定的時間,執行效率會有所降低。
  • 長期寫 ORM 代碼,會降低編寫 SQL 語句的能力。

1.3 ORM 解析過程:

  1. ORM 會將 Python 代碼轉成為 SQL 語句。
  2. SQL 語句通過 pymysql 傳送到數據庫服務端。
  3. 在數據庫中執行 SQL 語句並將結果返回。
    ORM 對應關係表:

2.Django ORM使用方法

2.1 創建數據庫:在mysql命令行執行以下命令,創建一個名為"TH"的數據庫。

create database TH;

2.2 修改Django配置文件:在項目的 settings.py 文件中找到 DATABASES和INSTALLED_APPS配置項,將其信息修改為:

#文件名django_study.setting.py
    DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.mysql",
            "NAME": "TH",  #數據庫名稱
            "USER": "root",
            "PASSWORD": "111111",
            "HOST": "127.0.0.1",
            "PORT": "3306"
           }
    }

    INSTALLED_APPS = [
        "django.contrib.admin",
        "django.contrib.auth",
        "django.contrib.contenttypes",
        "django.contrib.sessions",
        "django.contrib.messages",
        "django.contrib.staticfiles",
        "app1",
    ]

2.3 告訴 Django 使用 pymysql 模塊連接 mysql 數據庫:在與 settings.py 同級目錄下的__init__.py中引入模塊和進行配置。

#文件名django_study.__init__.py
import pymysql
pymysql.install_as_MySQLdb()

2.4 定義模型:在app(本例應用名稱為app1)的model.py下定義類,類名代表了數據庫表名,且繼承了models.Model。

# 文件名:app1.models.py
from django.db import models
 
class Test(models.Model):
    name = models.CharField(max_length=20, primary_key=True)
    age = models.IntegerField(default=0)

2.5 將 Django 項目中 models.py 文件的改動應用到數據庫中

python manage.py migrate(作用於全局)
python manage.py migrate app1(作用於應用)

命令執行成功,app1的migrations文件夾中生成0001_initial.py文件,mysql數據庫中添加了10張表。

如果出現django.db.utils.NotSupportedError: MySQL 8 or later is required 報錯,找到E:\Anaconda\Lib\site-packages\django\db\backends\base\base.py(其中E:\Anaconda替換為你的解釋器路徑),將以下版本檢查的函數註釋即可。

def init_connection_state(self):
        """Initialize the database connection settings."""
        global RAN_DB_VERSION_CHECK
        if self.alias not in RAN_DB_VERSION_CHECK:
            # self.check_database_version_supported()
            RAN_DB_VERSION_CHECK.add(self.alias)

2.6 通知Django模型有一些變更,模型有變更時,先makemigrations,後migrate。

python manage.py makemigrations

3.測試

自改應用app1的視圖函數如下,運行Django項目,然後在瀏覽器地址欄輸入測試接口對應的URL。

文件名:app1.views.py
from django.shortcuts import render
from django.http import HttpResponse

from app1.models import Test

# Create your views here.


def function1(request):
    t = Test(name="func1", age=8)
    t.save()
    return HttpResponse("function1")


def function2(request):
    t = Test(name="func2", age=4)
    t.save()
    return HttpResponse("function2")

app1.Test表中生成兩條記錄:

user avatar u_17037082 头像 u_17400586 头像 u_16281588 头像 oeasy 头像 u_15505879 头像 u_17467352 头像 itwhat 头像 yejianfeixue 头像 huaiyue_63f0b9e085bf0 头像 xiaohuzideboluo_cvmeub 头像 liutos 头像 yeshifu 头像
点赞 25 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.