Django——模型基礎ORM 資料庫連線配置 模型的建立與對映 資料的增刪改查
阿新 • • 發佈:2018-12-26
Django
- ORM概念:物件關係對映(Object Relational Mapping,簡稱ORM)
- ORM的優勢:不用直接編寫SQL程式碼,只需像操作物件一樣從資料庫操作資料。
Django的模型對映關係
- 模型類必須都寫在app下的models.py檔案中。
- 模型如果需要對映到資料庫,所在的app必須被安裝.
- 一個數據表對應一個模型類,表中的欄位,對應模型中的類屬性.
在專案的settings檔案中的DATABASES
注意:NAME是資料庫的庫名,在使用之前,需要先在資料庫中新建一個對應名字的database
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.msyql', 'NAME': database_name, 'USER': username, 'PASSWORD': password, 'HOST': '127.0.0.1', 'PORT': '3306' } }
- 建立一個管理員使用者pywjh賬號,密碼為 pywjh:CREATE USER 'pywjh'@'%'IDENTIFIED BY 'pywjh';
- 給這個使用者授予所有遠端訪問,這個使用者主要用於管理整個資料庫,備份,還原等操作。
- GRANT ALL ON *.* TO 'pywjh'@'%';
- 使授權立即生效:FLUSH PRIVILEGES;
pymsql資料庫聯結器的配置
設定聯結器為pymysql:
在主目錄下的的__init__.py檔案新增下面兩句
import pymysql pymysql.install_as_MySQLdb()
首先,在哪個APP下建立模型,都要先在settings中註冊APP
APP my_sql下的models.py
from django.db import models # Create your models here. class User(models.Model): id = models.AutoField(primary_key=True) # id屬性,不用新增Django也會自動新增 name = models.CharField(max_length=10) age = models.IntegerField() def __str__(self): # 定義輸出方法,在查詢的時候使用 return 'User<id=%s, name=%s, age=%s>'%( self.id, self.name, self.age )
然後在建立對映檔案:( 後面可以跟APP的名字,不跟則表示全部都對映)
python manage.py makemigrations [app_name]
將對映資料提交到資料庫中:
python manage.py migrate [app_name]
這是就會在資料庫中看到自己建立的模型
開啟資料我們能看到建立的以app名_模型名的資料表,而其他的一些表格是django自動生成的.
注意:如果要刪除表,那麼可以去django模型中註釋掉模型類,然後執行對映的命令,不要手動在命令列裡面去刪除.
資料庫的增刪改查
增:
配置到url後,在檢視views中:
from django.http import HttpResponse from .models import User def add(request): # # 方法一 # user = User() # user.name = '張三' # user.age = 22 # user.save() # # 方法二 # user = User(name='李四', age=23).save() # # 方法三 # User.objects.create(name='王五', age=22) # 方法四 User.objects.get_or_create(name='週六', age=24) # 這個方法不會重複新增 return HttpResponse('新增資料成功')
檢查資料庫:
views中:
檢視全部資料
from django.http import HttpResponse from .models import User def get(request): # 獲取全部資料 result = User.objects.all() print(result) return HttpResponse('查詢資料成功')
User.objects.all()——後臺輸出:
查詢一個數據:
def get(request): # 查村一個數據 result = User.objects.get(id=1) print(result) return HttpResponse('查詢資料成功')
查詢滿足條件的資料:
def get(request): # 查詢滿足條件的資料 result = User.objects.filter(name='王五') print(result) return HttpResponse('查詢資料成功')
注意:
- 通過print可以在後臺看到我們訪問到的資料,並且輸出方式就是模型中的__str__的格式.
- all()和filter()方法返回的是QuerySet物件.
- get()方式返回的單個物件,如果符合條件的物件有多個,則get報錯!
- 1.從資料庫中查詢出來的結果一般是一個集合,這個集合叫做 QuerySet.
- 2.QuerySet是可迭代物件.
- 3.QuerySet支援切片, 不支援負索引.
- 4.可以用list強行將QuerySet變成列表.
補充:
獲取一個屬性的搜尋資料:
def get(request): # 單獨獲取一個屬性的全部資料 result = User.objects.values('age') print(result) return HttpResponse('查詢資料成功')
去重:
def get(request): # 單獨獲取一個屬性的全部資料,並去重 result = User.objects.values('age').distinct() print(result) return HttpResponse('查詢資料成功')
在操作之前,先在models中在新增一個city的屬性,規定模型新增屬性要加上預設值,不要忘記建立對映檔案已經對映資料
from django.db import models # Create your models here. class User(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=10) age = models.IntegerField() city = models.CharField(max_length=20, default='北京') def __str__(self): return 'User<id=%s, name=%s, age=%s>'%( self.id, self.name, self.age )
對映檔案以後再檢視資料庫:
views:
def update(request): # 先查詢到資料在進行修改 res = User.objects.get(name='張三') res.city = '武漢' res.save() # 用update直接修改 # update針對的是QuerySet型別的資料 User.objects.filter(name='李四').update(city='重慶') return HttpResponse(' 資料修改成功')
所有的方法都是用與delete方法
def delete(request): result = User.objects.get(id=1) result.delete() User.objects.filter(name='週六').delete() return HttpResponse('刪除資料成功')