一、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伺服器 ---> 路由比對 ----> 視圖函數 ---> 操作模闆和資料
轉載于:https://www.cnblogs.com/zhangbingsheng/p/10612079.html