一 ORM簡介
(1) 詢數據層次圖解:若是操做mysql,ORM是在pymysq之上又進行了一層封裝python
(2) MVC或者MTV框架中包括一個重要的部分,就是ORM,它實現了數據模型與數據庫的解耦,即數據模型的設計不須要 依賴於特定的數據庫,經過簡單的配置就能夠輕鬆更換數據庫,這極大的減輕了開發人員的工做量,不須要面對因數據庫變動而致使的無效勞動mysql
(3)ORM是 '對象—關係—映射'的簡稱。sql
ORM能夠作的事情:數據庫
1 建立表,修改表,刪除表
2 插入數據
3 修改數據
4 刪除數據
不能幹: 不能建立數據庫
類名 ------->表
對象--------->一條數據
屬性----------> 字段
二 使用pymysql步驟:
(1) 建立數據庫(ORM不能建立數據庫)django
(2)在setting 裏配置app
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'lqz', 'USER': 'root', 'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': 3306, 'ATOMIC_REQUEST': True, 'OPTIONS': { "init_command": "SET storage_engine=MyISAM", } } } ''' 'NAME':要鏈接的數據庫(數據庫名字),鏈接前須要建立好 'USER':鏈接數據庫的用戶名 'PASSWORD':鏈接數據庫的密碼 'HOST':鏈接主機,默認本機 'PORT':端口 默認3306 'ATOMIC_REQUEST': True, 設置爲True統一個http請求對應的全部sql都放在一個事務中執行(要麼全部都成功,要麼全部都失敗)。 是全局性的配置, 若是要對某個http請求放水(而後自定義事務),能夠用non_atomic_requests修飾器 'OPTIONS': { "init_command": "SET storage_engine=MyISAM", } 設置建立表的存儲引擎爲MyISAM,INNODB '''
(3) 在app的 __init__.py 文件裏寫上:框架
import pymysql pymysql.install_as_MySQLdb() '''
(4) 在models裏定義類,類必須繼承models.Modelpost
(5)寫屬性,對應着數據庫的字段this
建立名爲app01的app,在app01下的model.py中建立模型 from django.db import models class UserInfo(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) password = models.CharField(max_length=32,null=True) # default='' 默認值 # null= True 自斷能夠爲空 gender = models.IntegerField() birthday = models.DateField() def __str__(self): return self.name //增長和刪除字段 刪除,直接註釋掉字段,執行數據庫遷移命令便可 新增字段,在類裏直接新增字段,直接執行數據庫遷移命令會提示輸入默認值,此時須要設置 publish = models.CharField(max_length=12,default='人民出版社',null=True)
(6) 執行 python3 manage.py makemigrations (至關於作一個記錄)
(7)執行 python3 manage.py migrate(會把記錄執行到數據庫)
建立出來的表名是: app的名字_類名
最後經過以上兩條數據庫遷移命令便可在指定的數據庫中建立表 #注意: 1 數據庫遷移記錄都在 app01下的migrations裏 2 使用showmigrations命令能夠查看沒有執行migrate的文件 3 makemigrations是生成一個文件,migrate是將更改提交到數據量
三 添加表記錄
views視圖層 from django.shortcuts import render,HttpResponse from app01.models import * def register(request): if request.methods == 'POST': name = request.POST.get('name') password = request.POST.get('password') gender = request.POST.get('gender') gender = request.POST.get('birthday') #第一種方式 user = UserInfo(birthday=birthday,name=name,password=password,gender=gender) user.save() #第二種方式(推薦這種) 建立成功,會返回一個對象 user = UserInfo.object.create(birthday=birthday,name=name,password=password,gender=gender) print(user) return HttpResponse('註冊成功') def user_list(request): # 把數據表裏用戶全拿出來 user_list = UserInfo.object.all() #all():查詢全部結果 print(type(user_list)) #類 print(user_list[0].name) #表裏面的每條數據至關於一個對象 能夠.訪問對象屬性 print(user_list[0].password) return render(request,'user_list',{'user_list':user_list})