若是使用pymysql,則能夠在view中直接import pymysql進行操做,與原操做無區別python
Django數據庫框架支持 sqlite3, MySQL, PostgreSQL等數據庫,只須要在settings.py中配置便可,與數據庫相關的代碼通常寫在models.py中mysql
ORM操做:默認使用文件自帶的db.sqlite3數據庫,若是須要使用mysql數據庫則須要進行如下配置sql
在setting.py中替換數據庫配置數據庫
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbname', 'USER': 'root', 'PASSWORD': 'xxx', 'HOST': '', 'PORT': '', } }
添加pymysql,因爲Django內部鏈接MySQL時使用的是MySQLdb模塊,而python3中還無此模塊,因此須要使用pymysql來代替,在工程同名的目錄裏__init__.py下添加django
import pymysql pymysql.install_as_MySQLdb()
建立表app
在對應APP的models.py中,若是建立多表則在此文件中添加類便可框架
#表名爲dongapp2_tbuser #屬性爲字段名,默認會建立主鍵爲自增ID列 #修改id列的字段名:iddong=models.AutoField(primary_key=True) class Tbuser(models.Model): userx=models.CharField(max_length=32) #類型爲:varchar(32) passwd=models.CharField(max_length=64)#能夠添加實參【null=True】,表示值能夠爲空 age=models.IntegerField() #類型爲:integer
在settings.py的INSTALLED_APPS=[ ]註冊,添加APP的名字
'dongapp2',
命令行進入APP目錄,執行下面兩條命令:
python ../manage.py makemigrations
python ../manage.py migrate
修改表spa
在修改或者刪除字段時都須要進行兩條命令的執行,models.py中的數據庫映射時時刻刻綁定着原數據,執行兩條命令後會進行數據表結構同步命令行
字段數據類型補充code
所設置的字段類型大部分是不會在編寫增刪改查時進行自動驗證,而是有益於Django自帶的admin管理後臺應用
xx=models.EmailField(null=True)#郵箱格式,Django自帶用戶管理頁使用 xx=models.URLField(null=True)#URL格式 xx=models.GenericIPAddressField(null=True)#IP4或者IP6格式 xx=models.BooleanField()#bool類型 xx=models.FloatField()#浮動數 xx=models.DateField()#相似於data =>YYYY-MM-DD xx=models.DateTimeField()#相似於datatime =>YYYY-MM-DD HH:mm:ss xx=models.TimeField() #時間
字段實參:
null #是否可爲空,默認不可爲空,如【unll=True】可爲空
default #默認值
primary_key #主鍵
db_column #數據庫中數據表的字段名
db_index #是否創建索引
auto_now_add #建立當前行時自動添加爲當前時間,【xx=models.DateTimeField(auto_now_add=True)】
auto_now #更新當前行時自動更新爲當前時間,僅支持下面的更新數據方法二
外鍵
在創建表字段時添加,外鍵字段在數據庫中爲:forekx_id
forekx=models.ForeignKey("另外一個表的類名",to_field="另外一個表類的字段名,默認爲id字段",default="默認值")
在數據獲取中進行跨表取數據
resx = models.Tbuser.objects.filter(id=3).first() resx.forekx.另外一個表類的任意字段名 # resx.forekx爲另外表的一行數據對象
添加/修改外鍵字段的值
#方法一 forekx_id=11 #方法二 forekx=models.XxxxXC.objects.filter(ldong="dongxiao").first()
數據的操做通常會在 view(業務處理)中進行
添加數據
1 from dongapp2 import models 2 #方法一 3 models.Tbuser.objects.create(userx="dong2",passwd="1234562",age=20) 4 #方法二 5 #datax=models.Tbuser(userx="dong3",passwd="1234563",age=20) 6 #datax.save()
查詢數據
Filter條件補充:Id字段大於等於0:【id__gt=0】
1 from dongapp2 import models 2 3 #查詢並輸出列表 4 # # resx=models.Tbuser.objects.all()#查詢全部,查詢結果爲[對象,對象] 5 # resx = models.Tbuser.objects.filter(userx="dong1", age=10) # 條件查詢,and 6 # countx = len(resx) # 獲得查詢的總行數 7 # for rowx in resx: # 循環輸出值,控制檯接收(開啓服務的地方) 8 # print(rowx.id, rowx.userx, rowx.age) 9 # resx=models.Tbuser.objects.all().values("id","name")#查詢全部並獲取指定字段數據,查詢結果[字典,字典] 10 11 # 查詢第一個,返回非列表 12 # resx = models.Tbuser.objects.filter(id=3).first() 13 # if resx: 14 # print(resx.age) 15 16 #返回查找的總行數 17 resx = models.Tbuser.objects.filter(passwd="1234562").count()
刪除數據
from dongapp2 import models resx = models.Tbuser.objects.filter(id=1).delete()
更新數據
from dongapp2 import models #方法一 resx = models.Tbuser.objects.filter(id=3).update(age=30) #方法二 resxobj = models.Tbuser.objects.filter(id=3).first() resxobj.age=100 resxobj.save()