1. 程式人生 > >Django框架(三)—— orm增刪改查、Django生命周期

Django框架(三)—— orm增刪改查、Django生命周期

task 添加數據 方式 mysq 增刪改查 數據表 映射 周期 mysqld

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‘: ‘123123‘,
            ‘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()來取出第一條

models.User.objects.filter(id=id).first()

三、Django生命周期

瀏覽器 ---> web服務器 ---> 路由匹配 ----> 視圖函數 ---> 操作模板和數據

圖文參考:參考網址

Django框架(三)—— orm增刪改查、Django生命周期