天天看點

Django架構(三)-- orm增删改查、Django生命周期

一、orm介紹

1、什麼是orm

ORM即Object Relational Mapping,全稱對象關系映射。

2、使用orm的優缺點

優點:
  • 不用寫SQL語句
  • 開發效率高
缺點:
  • SQL的效率低

3、使用orm

  • 如果連接配接的是pycharm預設的Sqlite,不用改動,使用預設配置即可
  • 如果連接配接mysql,需要在配置檔案中的setting中進行配置:

    将DATABASES={} 更新為

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': 'pie123',
        'NAME': 'test_database',
    }
}      

同時還要在__init__.py檔案中進行初始化設定:

import pymysql
pymysql.install_as_MySQLdb()      

配置完以後,要進行資料遷移(在pycharm的終端Terminal中運作指令),否則資料更新不能同步到mysql資料庫中

python manage.py makemigrations    ----記錄資料庫的變化,在migrations檔案中可以看到記錄
python manage.py migrate           ----将變化同步到資料庫中      

或者

菜單 tools--->Run manage.py Task,即可進入manage.py,直接輸入以下指令即可

makemigrations    ----記錄資料庫的變化,在migrations檔案中可以看到記錄
migrate           ----将變化同步到資料庫中      

4、orm的使用限制

​ 隻能建立資料表和字段,不能建立資料庫(必須手動建立資料庫)

​ 建立一個類就表示建立了一個資料表,類中的屬性表示資料表中的字段

建立表和字段在modules.py中

類 --->  資料表
屬性 --->  字段      

5、orm建立表和字段

# 類必須繼承models.Model類,否則隻表示一個普通的類
# AutoField 自動增長的int類型
# primary_key=True 該字段是主鍵
# CharField(max_length=32) 表示 varchar(32)
class User(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=32)
    address = models.CharField(max_length=32)      

二、orm增删改字段

在增删改以後都要進行資料遷移

1、orm增加字段

直接在建立表的類中添加一個屬性,即增加一個字段,然後執行資料遷移

添加的字段必須有預設值,兩種方式

  • 在添加的參數中添加預設值
phone=models.CharField(max_length=64,default='120')      
  • 在資料遷移的時候,設定預設值

2、orm删除字段

将類中的屬性注釋,即表示删除字段,執行資料遷移

3、orm修改字段

直接修改類中的屬性,執行資料庫遷移指令

4、案例總結

  • user表的增删改
(1)單表查詢所有使用者

得到的是queryset對象(類似于清單),清單中一個個對象[user1, user2, user3]

res = models.User.objects.all()      
(2)render

傳回頁面,将queryset對象(類似于清單)res傳回到userlist.html頁面的user_list

render(request, 'userlist.html', {'user_list': res})      
(3)循環模闆
{% for user in user_list %}
    # 要循環的内容,下面的插值表達式表示擷取每一個user的name的資料    
    {{user.name}}
{% endfor%}      
(4)get請求攜帶參數

通過get發送請求,會将資料暴露出來,例如id就會顯示http://127.0.0.1:8000/deleteuser/?id=1

前台get方式送出的資料,背景從request.GET字典裡取值:

id = request.GET.get('id')   # 推薦使用,即使沒有接收到資料也會有預設值,不會抛出異常
或者
id = request.GET['id']  # 該方式要是沒有接收到資料會出現異常      
(5)post請求送出資料

前台post方式送出的資料,背景從request.POST字典裡取值:

name = request.POST.get('name')      
(6)删除資料記錄

先過濾找到指定資料,然後調用方法delete()删除該資料

# 傳回值是影響的行數
res = models.User.objects.filter(id = id).delete()      
(7)添加資料記錄

兩種方式:

  • 方式一:
user=models.User.objects.create(name=name,password=pwd,address=addr)      
  • 方式二:
user = models.User(name=name, password=password, address=addr)
user.save()      
(8)修改資料記錄

先過濾找到要修改的資料記錄,然後調用update()方法修改資料

models.User.objects.filter(id = id).update(name=name,password=password,age=age)      
(9)查詢單條資料

由于過濾到的所有資料可能是多條資料,是以要用first()來取出第一條

三、Django生命周期

浏覽器 ---> web伺服器 ---> 路由比對 ----> 視圖函數 ---> 操作模闆和資料

Django架構(三)-- orm增删改查、Django生命周期

轉載于:https://www.cnblogs.com/zhangbingsheng/p/10612079.html