Python后台開發Django(數據庫)


如果使用pymysql,則可以在view中直接import pymysql進行操作,與原操作無區別

Django數據庫框架支持 sqlite3, MySQL, PostgreSQL等數據庫,只需要在settings.py中配置即可,與數據庫相關的代碼一般寫在models.py中

配置MYSQL

ORM操作:默認使用文件自帶的db.sqlite3數據庫,如果需要使用mysql數據庫則需要進行以下配置

在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下添加

import pymysql
pymysql.install_as_MySQLdb()

表的基本操作

創建表

在對應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

修改表

在修改或者刪除字段時都需要進行兩條命令的執行,models.py中的數據庫映射時時刻刻綁定着原數據,執行兩條命令后會進行數據表結構同步

字段數據類型補充

所設置的字段類型大部分是不會在編寫增刪改查時進行自動驗證,而是有益於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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM