(七)Django學習——模型基礎ORM簡介;Django模型映射關係;Mysql數據庫連接配置;模型的創建與映射;數據的增刪改查

1.Django的ORM簡介

注意:數據庫多種多樣,這導致使用不同的數據庫就要使用不用的操作數據庫的命令,如果我們先是使用的Mysql數據庫, 之後因爲某些要求要使用到Redis數據庫,難道我們要將我們整個項目的相關語句全部都改一遍嗎!!!但是至少我知道Django不需要。因爲Django自帶強大的ORM系統!!!

第一部分介紹:ORM簡介!

(1)ORM概念:對象關係映射(Object Relational Mapping,簡稱ORM)

(2)ORM的優勢:不用直接編寫SQL代碼,只需像操作對象一樣從數據庫操作數據。

在這裏插入圖片描述

第二部分介紹:Django模型映射關係!

在這裏插入圖片描述

1. 模型類必須都寫在app下的models.py文件中。
2. 模型如果需要映射到數據庫,所在的app必須註冊.
3. 一個數據表對應一個模型類,表中的字段,對應模型中的類屬性.

2.數據庫的連接配置(使用Mysql爲例)

(1)此處模型所在的app名爲music,在settings.py中對其進行註冊:

在這裏插入圖片描述

(2)在對應的遠程數據庫中創建對應的數據庫:(pycharm中操作)

首先:開啓遠程連接!

在這裏插入圖片描述

然後,使用遠程中的數據庫Mysql,並創建對應的數據庫db_test

在這裏插入圖片描述
在這裏插入圖片描述

(3)在settings.py中配置DATABASES

# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    # }
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 數據庫引擎
        'NAME': 'db_test',                     # 數據庫名稱
        'USER': 'root',                        # 連接數據庫的用戶名
        'PASSWORD': 'qwe123',                  # 連接數據庫的密碼
        'HOST': '127.0.0.1',                   # mysql服務器的域名和ip地址
        'PORT': '3306',                        # mysql的一個端口號,默認是3306
    }

}

(4)在對應的虛擬環境中安裝pymysql!

在這裏插入圖片描述

(5)設置連接器爲pymysql(因爲Django默認使用的數據庫不是Mysql)

在主目錄下的的__init__.py文件添加下面兩句:
import pymysql
pymysql.install_as_MySQLdb()

3.模型的創建與映射

(1)在app下面的models.py中創建django的模型類.

from django.db import models

# Create your models here.

class User(models.Model):
    id = models.AutoField(primary_key=True)         #主鍵可以省略,Django默認會爲我們加上一個名爲id的主鍵,寫的話就可以改主鍵的名字!
    name = models.CharField(max_length=50)
    age = models.IntegerField()


(2)將模型類映射到數據庫:

1.首先執行以下命令,要創建映射文件:(命令:makemigrations)

命令後面可以跟app名稱,表示指定對某個app的模型進行映射,沒寫所有的app都執行(第一次的話不指定)
在這裏插入圖片描述

在這裏插入圖片描述

2.執行以下命令,將映射文件中的映射數據提交到數據庫中:(命令:migrate)

在這裏插入圖片描述

3.打開數據庫我們能看到創建的以app名_模型名的數據表,而其他的一些表格是django自動生成的.

注意:如果要刪除表,那麼可以去django模型中註釋掉模型類,然後執行映射的命令,不要手動在命令行裏面去刪除.

在這裏插入圖片描述

注意:如果要新增字段:就要先在模型類中添加對應字段的屬性,並設置一個默認值,然後執行映射命令,將字段成功的映射到數據庫中才算成功!

4.數據的增刪改查

(1)數據的增刪改查----------增加數據

在視圖函數中導入User模型類,然後使用下面的方法添加數據:

from .models import User
def add_user(request):
    #方法一
    taka = User(name='taka',age=18)
    taka.save()
    #方法二
    xiaopo = User()
    xiaopo.name = 'xiaopo'
    xiaopo.age = 18
    xiaopo.save()
    #方法三
    aa = User.objects.get_or_create(name='xiaohong',age=18)  #插入前會進行查找,如果沒有相同的數據就會添加;如果有就不會
    print(aa)       #回返回一個元組,第一個數據是添加成功的實例;第二個數據是True或False。(添加成功爲True;反之爲False)
    User.objects.get_or_create(name='xiaohong',age=18)#插入前會進行查找,如果沒有相同的數據就會添加;如果有就不會
    return HttpResponse("插入數據成功!")

實現效果:

在這裏插入圖片描述
在這裏插入圖片描述

(2)數據的增刪改查----------查找數據

1.首先:在模型中添加一個類屬性__str__,控制查詢的數據顯示的格式!

from django.db import models

# Create your models here.

class User(models.Model):
    id = models.AutoField(primary_key=True)         #主鍵可以省略,Django默認會爲我們加上!
    name = models.CharField(max_length=50)
    age = models.IntegerField()

    def __str__(self):                  #此方法的作用在查詢時會顯示!
        return 'User<id=%s,name=%s,age=%s>' %(self.id, self.name, self.age)



2.然後進行查詢:

在視圖函數中導入User模型類,實現簡單的查找

from .models import User

def search_user(request):
    #查詢所有記錄對象
    rs1 = User.objects.all()
    print("這是所有記錄對象:",rs1)			#通過print可以在後臺看到我們訪問到的數據,並且輸出方式就是模型中的__str__的格式.
    #查詢一個記錄對象
    rs2 = User.objects.get(id = 1)
    print("這是一個記錄對象:",rs2)
    #查詢滿足條件的對象
    rs3 = User.objects.filter(name='xiaoming')
    print("這是滿足條件的對象:",rs3)
    return HttpResponse("查詢數據成功!")

**注意:
1.all()和filter()方法返回的是QuerySet對象.
2.get()方式返回的單個對象,如果符合條件的對象有多個,則get報錯!而且如果查詢不到也會報錯!
**

實現效果:

在這裏插入圖片描述
在這裏插入圖片描述

3.拓展:數據的增刪改查--------數據庫相關的接口(QuerySet API)

1.從數據庫中查詢出來的結果一般是一個集合,這個集合叫做 QuerySet.
2.QuerySet是可迭代對象.
3.QuerySet支持切片, 不支持負索引.
4.可以用list強行將QuerySet變成列表.

(3)數據的增刪改查----------刪除數據

在視圖函數中導入User模型類,然後使用下面的方法刪除數據:

from .models import User


def delete_user(request):
	#實例和QuerySet都具備刪除方法
    User.objects.get(id=1).delete()				#get方法得到的是單個對象,所以是刪除一個數據!
    User.objects.filter(age=18).delete()		#刪除所有age屬性值爲18的數據!
    User.objects.all().delete()					#刪除所有數據!
    s = User.objects.filter(age=18)
    s[1].delete()								#刪除名字爲18的數據中的指定的一條
    return HttpResponse("刪除數據成功!")

(4)數據的增刪改查----------修改數據

在視圖函數中導入User模型類,然後使用下面的方法更新數據:

from .models import User

def update_user(request):
    #第一種方法:先查找到數據,然後再進行屬性賦值修改(對於實例的修改)
    rs = User.objects.get(name="xiaoming")		#修改name屬性值爲xiaoming的name屬性值爲xiaowang(因爲使用了get方法所以僅修改第一條!)
    rs.name='xiaowang'
    rs.save()
    #第二種方法:使用update方法直接修改(對於集合的修改)
    User.objects.filter(name='xiaowang').update(name='AAA')	#修改所有name屬性值爲xiaowang的name屬性值爲AAA!
    User.objects.all().update(age=22)			#修改所有數據的age屬性值爲22!
    return HttpResponse("修改數據成功!")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章