日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 中caption_Django-Model操作数据库(增删改查、连表结构)(示例代码)

發布時間:2024/8/23 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 中caption_Django-Model操作数据库(增删改查、连表结构)(示例代码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Django-Model操作數據庫(增刪改查、連表結構)

一、數據庫操作

1、創建model表

基本結構

from django.db importmodelsclassuserinfo(models.Model):#如果沒有models.AutoField,默認會創建一個id的自增列

name = models.CharField(max_length = 30)

email=models.EmailField()

memo= models.TextField()

更多字段:

1 、models.AutoField  自增列 = int ( 11)

如果沒有的話,默認會生成一個名稱為 id 的列,如果要顯示的自定義一個自增列,必須將給列設置為主鍵 primary_key=True 。2、models.CharField  字符串字段

必須 max_length 參數3 、models.BooleanField  布爾類型 = tinyint( 1)

不能為空,Blank=True4 、models.ComaSeparatedIntegerField  用逗號分割的數字 =varchar

繼承CharField,所以必須 max_lenght 參數5、models.DateField  日期類型 date

對于參數,auto_now=True 則每次更新都會更新這個時間;auto_now_add 則只是第一次創建添加,之后的更新不再改變。6、models.DateTimeField  日期類型 datetime

同DateField的參數7 、models.Decimal  十進制小數類型 =decimal

必須指定整數位max_digits和小數位decimal_places8 、models.EmailField  字符串類型(正則表達式郵箱) =varchar

對字符串進行正則表達式9 、models.FloatField  浮點類型 =double10、models.IntegerField  整形11、models.BigIntegerField  長整形

integer_field_ranges={‘SmallIntegerField‘ :( - 32768 , 32767),‘IntegerField‘ :( - 2147483648 , 2147483647),‘BigIntegerField‘ :( - 9223372036854775808 , 9223372036854775807),‘PositiveSmallIntegerField‘ :( 0 , 32767),‘PositiveIntegerField‘ :( 0 , 2147483647),

}12、models.IPAddressField  字符串類型(ip4正則表達式)13、models.GenericIPAddressField  字符串類型(ip4和ip6是可選的)

參數protocol可以是:both、ipv4、ipv6

驗證時,會根據設置報錯14、models.NullBooleanField  允許為空的布爾類型15、models.PositiveIntegerFiel  正Integer16、models.PositiveSmallIntegerField  正smallInteger17、models.SlugField  減號、下劃線、字母、數字18、models.SmallIntegerField  數字

數據庫中的字段有:tinyint、smallint、 int 、bigint19 、models.TextField  字符串 =longtext20、models.TimeField  時間 HH:MM[:ss[.uuuuuu]]21、models.URLField  字符串,地址正則表達式22、models.BinaryField  二進制23、models.ImageField圖片24 、models.FilePathField文件

更多參數

1 、null =True

數據庫中字段是否可以為空2 、blank =True

django的Admin中添加數據時是否可允許空值3 、primary_key =False

主鍵,對AutoField設置主鍵后,就會代替原來的自增 id 列4、auto_now 和 auto_now_add

auto_now 自動創建- - -無論添加或修改,都是當前操作的時間

auto_now_add 自動創建- - -永遠是創建時的時間5、choices

GENDER_CHOICE=(

(u‘M‘ , u ‘Male‘),

(u‘F‘ , u ‘Female‘),

)

gender= models.CharField(max_length = 2 ,choices =GENDER_CHOICE)6、max_length7、default  默認值8、verbose_name  Admin中字段的顯示名稱9 、name|db_column  數據庫中的字段名稱10 、unique =True   不允許重復11 、db_index =True   數據庫索引12 、editable =True   在Admin里是否可編輯13 、error_messages =None   錯誤提示14 、auto_created =False   自動創建15、help_text  在Admin中提示幫助信息16 、validators =[]17 、upload - to

2、注冊APP,settings添加app

3、生成相應的表

python manage.py makemigrations

python manage.py migrate

4、admin后臺注冊表

python manage.py createsuperuser 創建用戶

后臺可以管理,添加數據

對數據進行增刪改查

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‘)

成功獲取數據

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()

常用方法

#獲取個數#

#models.Tb1.objects.filter(name=‘seven‘).count()#大于,小于#

#models.Tb1.objects.filter(id__gt=1) # 獲取id大于1的值#models.Tb1.objects.filter(id__lt=10) # 獲取id小于10的值#models.Tb1.objects.filter(id__lt=10, id__gt=1) # 獲取id大于1 且 小于10的值#in#

#models.Tb1.objects.filter(id__in=[11, 22, 33]) # 獲取id等于11、22、33的數據#models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in#contains#

#models.Tb1.objects.filter(name__contains="ven")#models.Tb1.objects.filter(name__icontains="ven") # icontains大小寫不敏感#models.Tb1.objects.exclude(name__icontains="ven")#range#

#models.Tb1.objects.filter(id__range=[1, 2]) # 范圍bettwen and#其他類似#

#startswith,istartswith, endswith, iendswith,#order by#

#models.Tb1.objects.filter(name=‘seven‘).order_by(‘id‘) # asc#models.Tb1.objects.filter(name=‘seven‘).order_by(‘-id‘) # desc#limit 、offset#

#models.Tb1.objects.all()[10:20]#group by

from django.db.models importCount, Min , Max , Sum#models.Tb1.objects.filter(c1=1).values(‘id‘).annotate(c=Count(‘num‘))#SELECT "app01_tb1"."id", COUNT("app01_tb1"."num") AS "c" FROM "app01_tb1" WHERE "app01_tb1"."c1" = 1 GROUP BY "app01_tb1"."id"

django中models的filter過濾方法__gt大于__gte大于等于__lt小于__lte小于等于__in存在于一個list范圍內__startswith以...開頭__istartswith以...開頭忽略大小寫__endswith以...結尾__iendswith以...結尾,忽略大小寫__range在...范圍內__year日期字段的年份__month日期字段的月份__day日期字段的日__isnull=True/False__overlap集合至少有一個元素重合__contains集合包含__regex 匹配正則表達

二、常用字段

models.DateTimeField  日期類型 datetime

參數,

auto_now =True :則每次更新都會更新這個時間

auto_now_add 則只是第一次創建添加,之后的更新不再改變。classUserInfo(models.Model):

name= models.CharField(max_length = 32)

ctime= models.DateTimeField(auto_now =True )

uptime= models.DateTimeField(auto_now_add = True )

from web importmodelsdefhome(request):

models.UserInfo.objects.create(name= ‘yangmv‘)

after=models.UserInfo.objects. all ()printafter[ 0 ].ctimereturn render(request, ‘home/home.html‘ )

表結構的修改

表結構修改后,原來表中已存在的數據,就會出現結構混亂,makemigrations更新表的時候就會出錯

解決方法:

1、新增加的字段,設置允許為空。生成表的時候,之前數據新增加的字段就會為空。(null=True允許數據庫中為空,blank=True允許admin后臺中為空)

2、新增加的字段,設置一個默認值。生成表的時候,之前的數據新增加字段就會應用這個默認值

執行makemigrations, migrate 后。老數據會自動應用新增加的規則

models.ImageField 圖片

models.GenericIPAddressField IP

ip= models.GenericIPAddressField(protocol="ipv4",null=True,blank=True)

img= models.ImageField(null=True,blank=True,upload_to="upload")

數據庫中保存的只是圖片的路徑

常用參數

選擇下拉框 choices

classUserInfo(models.Model):

USER_TYPE_LIST=(

(1,‘user‘),

(2,‘admin‘),

)

user_type= models.IntegerField(choices=USER_TYPE_LIST,default=1)

2、連表結構

一對多:models.ForeignKey(其他表)

多對多:models.ManyToManyField(其他表)

一對一:models.OneToOneField(其他表)

應用場景:

一對多:當一張表中創建一行數據時,有一個單選的下拉框(可以被重復選擇)

例如:創建用戶信息時候,需要選擇一個用戶類型【普通用戶】【金牌用戶】【鉑金用戶】等。

多對多:在某表中創建一行數據是,有一個可以多選的下拉框

例如:創建用戶信息,需要為用戶指定多個愛好

一對一:在某表中創建一行數據時,有一個單選的下拉框(下拉框中的內容被用過一次就消失了

例如:原有含10列數據的一張表保存相關信息,經過一段時間之后,10列無法滿足需求,需要為原來的表再添加5列數據

一對多:

classGame(models.Model):

gname= models.CharField(max_length = 32)classHost(models.Model):

hostname= models.CharField(max_length = 32)

game= models.ForeignKey( ‘Game‘ )

這是Game表,里面有3個業務

這是主機表,可以通過外鍵,對應到Game表的業務的ID

多對多:

classUserGroup(models.Model):

group_name= models.CharField(max_length = 16)classUser(models.Model):

name= models.CharField(max_length = 16)

sex= models.CharField(max_length = 16)

email= models.EmailField(max_length = 32)

usergroup_user= models.ManyToManyField( ‘UserGroup‘ )

Django model會自動創建第3張關系表,用于對應user id 和usergroup id

這是UserGroup表

這是User表

這是Django自動生成的對應關系表

user_id = 1 為 yangmv,同時屬于1,2(技術部,運營部)

一對一: (一對多增加了不能重復)

classUser2(models.Model):

name= models.CharField(max_length = 16)

sex= models.CharField(max_length = 16)

email= models.EmailField(max_length = 32)classAdmin(models.Model):

username= models.CharField(max_length = 32)

password= models.CharField(max_length = 32)

admin_user2= models.OneToOneField( ‘User2‘ )

連接Mysql

DATABASES ={‘default‘:{‘ENGINE‘ : ‘django.db.backends.mysql‘,‘NAME‘ : ‘dbname‘,‘USER‘ : ‘root‘,‘PASSWORD‘ : ‘xxx‘,‘HOST‘ :‘‘,‘PORT‘ :‘‘,

}

}

一對多操作實例

首先生成2個表

from django.db importmodelsclassGroup2(models.Model):

caption= models.CharField(max_length = 32)classUser2(models.Model):

username= models.CharField(max_length = 32)

group2= models.ForeignKey( ‘Group2‘)

input和select標簽用forms生成

先執行create_group生成3個group

已經查詢出Group數據

添加

方法1,方法2

defcreate_user(request):

obj=Forign.UserForm(request.POST)if request.method = = ‘POST‘:ifobj.is_valid():

all_data=obj.clean()#print all_data#獲取提交頁面提交來的數據{‘username‘: u‘yang1‘, ‘usergroup‘: 1}#方法1,先獲取對象,添加#group_obj = models.Group2.objects.get(id=all_data[‘usergroup‘])#models.User2.objects.create(username=all_data[‘username‘],usergroup=group_obj)#方法2(推薦)

models.User2.objects.create(username = all_data[ ‘username‘ ],group2_id = all_data[ ‘usergroup‘])#django會自動把數據庫group2變為group2_id

else:

error=obj.errorsprint error[ ‘username‘][ 0 ]print error[ ‘usergroup‘][ 0 ]return render(request, ‘forign/create_user.html‘ ,{ ‘obj‘ :obj})

方法3

defcreate_user(request):

obj=Forign.UserForm(request.POST)if request.method = = ‘POST‘:ifobj.is_valid():

all_data=obj.clean()#print all_data#獲取提交頁面提交來的數據{‘username‘: u‘yang1‘, ‘usergroup‘: 1}#方法1,先獲取對象,添加#group_obj = models.Group2.objects.get(id=all_data[‘usergroup‘])#models.User2.objects.create(username=all_data[‘username‘],usergroup=group_obj)#方法2(推薦)#models.User2.objects.create(username=all_data[‘username‘],group2_id=all_data[‘usergroup‘])#django會自動把數據庫group2變為group2_id#方法3(推薦)

models.User2.objects.create( * *all_data)printmodels.User2.objects. all ().count()else:pass

#error = obj.errors#print error[‘username‘][0]#print error[‘usergroup_id‘][0]

return render(request, ‘forign/create_user.html‘ ,{ ‘obj‘ :obj})

查詢。展示出所有的數據

defcreate_user(request):

obj=Forign.UserForm(request.POST)if request.method = = ‘POST‘:ifobj.is_valid():

all_data=obj.clean()#方法3(推薦)

models.User2.objects.create( * *all_data)printmodels.User2.objects. all ().count()else:passuser_list=models.User2.objects. all ()return render(request, ‘forign/create_user.html‘ ,{ ‘obj‘ :obj, ‘user_list‘ :user_list})

< table border="1">{% for item in user_list %}< tr >

< td >{{ item.username }} td >

< td >{{ item.group2.caption }} td >

tr >{% endfor %} table >

GET方式查詢

defcreate_user(request):

obj=Forign.UserForm(request.POST)if request.method = = ‘POST‘:ifobj.is_valid():

all_data=obj.clean()#方法3(推薦)

models.User2.objects.create( * *all_data)printmodels.User2.objects. all ().count()else:pass

#查用戶

get_user = request.GET.get( ‘username‘)

user_list= models.User2.objects. filter (username =get_user)return render(request, ‘forign/create_user.html‘ ,{ ‘obj‘ :obj, ‘user_list‘:user_list})

#查組

get_val = request.GET.get( ‘group‘)

user_list= models.User2.objects. filter (group2__caption =get_val)

一對多跨表操作,總結

1、group2對應的是一個對象

2、創建數據 group2_id ,直接查詢數據庫

3、獲取數據,通過. group2.caption

4、查詢數據,通過__ group2__caption

總結

以上是生活随笔為你收集整理的mysql 中caption_Django-Model操作数据库(增删改查、连表结构)(示例代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。