django-model操作数据库(增删改查)
一、數(shù)據(jù)庫操作
1、創(chuàng)建model表
?
基本結(jié)構(gòu)
更多字段:
+ View Code
更多參數(shù)
+ View Code
2、注冊APP,settings添加app
3、生成相應(yīng)的表
? python manage.py makemigrations
? python manage.py migrate
4、admin后臺注冊表
python manage.py createsuperuser 創(chuàng)建用戶
后臺可以管理,添加數(shù)據(jù)
?
?
對數(shù)據(jù)進行增刪改查
查
models.UserInfo.objects.all()
models.UserInfo.objects.all().values('user') #只取user列
models.UserInfo.objects.all().values_list('id','user') #取出id和user列,并生成一個列表
models.UserInfo.objects.get(id=1)
models.UserInfo.objects.get(user='yangmv')
成功獲取數(shù)據(jù)
增
models.UserInfo.objects.create(user='yangmv',pwd='123456')
或者
obj = models.UserInfo(user='yangmv',pwd='123456')
obj.save()
或者
dic = {'user':'yangmv','pwd':'123456'}
models.UserInfo.objects.create(**dic)
?
刪
models.UserInfo.objects.filter(user='yangmv').delete()
改
models.UserInfo.objects.filter(user='yangmv').update(pwd='520')
或者
obj = models.UserInfo.objects.get(user='yangmv')
obj.pwd = '520'
obj.save()
常用方法
+ View Code
?
二、常用字段
models.DateTimeField 日期類型 datetime
參數(shù),
auto_now = True :則每次更新都會更新這個時間
auto_now_add 則只是第一次創(chuàng)建添加,之后的更新不再改變。
?
?
?
表結(jié)構(gòu)的修改
表結(jié)構(gòu)修改后,原來表中已存在的數(shù)據(jù),就會出現(xiàn)結(jié)構(gòu)混亂,makemigrations更新表的時候就會出錯
解決方法:
1、新增加的字段,設(shè)置允許為空。生成表的時候,之前數(shù)據(jù)新增加的字段就會為空。(null=True允許數(shù)據(jù)庫中為空,blank=True允許admin后臺中為空)
2、新增加的字段,設(shè)置一個默認值。生成表的時候,之前的數(shù)據(jù)新增加字段就會應(yīng)用這個默認值
執(zhí)行makemigrations, migrate 后。老數(shù)據(jù)會自動應(yīng)用新增加的規(guī)則
?
?
models.ImageField 圖片
models.GenericIPAddressField IP
ip = models.GenericIPAddressField(protocol="ipv4",null=True,blank=True)img = models.ImageField(null=True,blank=True,upload_to="upload")
?
數(shù)據(jù)庫中保存的只是圖片的路徑
?
?
常用參數(shù)
選擇下拉框 choices
class UserInfo(models.Model):
? USER_TYPE_LIST = (
? ? ? (1,'user'),
(2,'admin'),
)
? user_type = models.IntegerField(choices=USER_TYPE_LIST,default=1)
?
?
?
?
2、連表結(jié)構(gòu)
-
一對多:models.ForeignKey(其他表)
-
多對多:models.ManyToManyField(其他表)
-
一對一:models.OneToOneField(其他表)
應(yīng)用場景:
-
一對多:當(dāng)一張表中創(chuàng)建一行數(shù)據(jù)時,有一個單選的下拉框(可以被重復(fù)選擇)例如:創(chuàng)建用戶信息時候,需要選擇一個用戶類型【普通用戶】【金牌用戶】【鉑金用戶】等。
-
多對多:在某表中創(chuàng)建一行數(shù)據(jù)是,有一個可以多選的下拉框例如:創(chuàng)建用戶信息,需要為用戶指定多個愛好
-
一對一:在某表中創(chuàng)建一行數(shù)據(jù)時,有一個單選的下拉框(下拉框中的內(nèi)容被用過一次就消失了例如:原有含10列數(shù)據(jù)的一張表保存相關(guān)信息,經(jīng)過一段時間之后,10列無法滿足需求,需要為原來的表再添加5列數(shù)據(jù)
?
一對多:
這是Game表,里面有3個業(yè)務(wù)
這是主機表,可以通過外鍵,對應(yīng)到Game表的業(yè)務(wù)的ID
建第3張關(guān)系表,用于對應(yīng)user id 和usergroup id
這是UserGroup表
這是User表
這是Django自動生成的對應(yīng)關(guān)系表
user_id = 1 為 yangmv,同時屬于1,2(技術(shù)部,運營部)
?
?
?
一對一: (一對多增加了不能重復(fù))
?
?
?
?
連接Mysql
+ View Code
?
一對多操作實例
首先生成2個表
input和select標(biāo)簽用forms生成
?
先執(zhí)行create_group生成3個group
?
已經(jīng)查詢出Group數(shù)據(jù)
添加
方法1,方法2
?
方法3
查詢。展示出所有的數(shù)據(jù)
?
GET方式查詢
?
一對多跨表操作,總結(jié)
1、group2對應(yīng)的是一個對象
2、創(chuàng)建數(shù)據(jù) group2_id ,直接查詢數(shù)據(jù)庫
3、獲取數(shù)據(jù),通過. group2.caption
4、查詢數(shù)據(jù),通過__ group2__caption
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/zuichuyouren/p/11094673.html
總結(jié)
以上是生活随笔為你收集整理的django-model操作数据库(增删改查)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20岁学点什么手艺好呢 以下几个可以参考
- 下一篇: 犯罪心理解读Mybatis拦截器