orm增刪改查、Django生命週期
1、orm介紹
一、什麼是orm
ORM即Object Relational Mapping,全稱對象關係映射。javascript
二、使用orm的優缺點
優勢:
- 不用寫SQL語句
- 開發效率高
缺點:
- SQL的效率低
三、使用orm
-
若是鏈接的是pycharm默認的Sqlite,不用改動,使用默認配置便可html
-
若是鏈接mysql,須要在配置文件中的setting中進行配置:java
將DATABASES={} 更新爲python
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', 'PASSWORD': '123123', 'NAME': 'test_database', } }
同時還要在__init__.py文件中進行初始化設置:mysql
import pymysql pymysql.install_as_MySQLdb()
配置完之後,要進行數據遷移(在pycharm的終端Terminal中運行指令),不然數據更新不能同步到mysql數據庫中web
python manage.py makemigrations ----記錄數據庫的變化,在migrations文件中能夠看到記錄 python manage.py migrate ----將變化同步到數據庫中
或者sql
菜單 tools--->Run manage.py Task,便可進入manage.py,直接輸入如下指令便可數據庫
makemigrations ----記錄數據庫的變化,在migrations文件中能夠看到記錄 migrate ----將變化同步到數據庫中
四、orm的使用限制
只能建立數據表和字段,不能建立數據庫(必須手動建立數據庫)django
建立一個類就表示建立了一個數據表,類中的屬性表示數據表中的字段瀏覽器
建立表和字段在modules.py中
類 ---> 數據表 屬性 ---> 字段
五、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)
2、orm增刪改字段
在增刪改之後都要進行數據遷移
一、orm增長字段
直接在建立表的類中添加一個屬性,即增長一個字段,而後執行數據遷移
添加的字段必須有默認值,兩種方式
- 在添加的參數中添加默認值
phone=models.CharField(max_length=64,default='120')
- 在數據遷移的時候,設置默認值
二、orm刪除字段
將類中的屬性註釋,即表示刪除字段,執行數據遷移
三、orm修改字段
直接修改類中的屬性,執行數據庫遷移命令
四、案例總結
- 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()
3、Django生命週期
瀏覽器 ---> web服務器 ---> 路由匹配 ----> 視圖函數 ---> 操做模板和數據
圖文參考:參考網址