ORM字段操作


django orm 建表字段

 在django modle 中,我們定義的類,他的對象就是數據庫表中的一行數據!!!

               django orm 基礎

一:modle的各個字段:

在python中以code first,所以在python中用類和對象,來調用底層數據庫API來操作數據庫。

1:創建數據庫:

數據庫配置寫在:子應用的:modles.py配置文件中。

需要注意的時候app需要注冊。在setting中。

默認情況下,使用的數據庫是sqllite3.

創建類:

 
 1 from django.db import models  2  3 # Create your models here.  4 class Userinfo(models.Model):  5 '''  6  功能:該類主要功能是創建用戶的信息表格。  7 '''  8 user=models.CharField(max_length=12)  9 password=models.CharField(max_length=40) 10 ipone_num=models.CharField(max_length=12) 11 12 13 class Hostinfo(models.Model): 14 ''' 15  功能:該類為用戶錄入主機數據表格。 16 ''' 17 host=models.CharField(max_length=32) 18 address=models.CharField(max_length=32,default="馬駒橋機房") 19 ip=models.CharField(max_length=34) 20 stat=models.CharField(max_length=32) 21 prot=models.CharField(max_length=32) 22 service=models.CharField(max_length=32,default='商城業務') 23 department=models.CharField(max_length=32,default="應用運維") 24 mac_info=models.CharField(max_length=32,default="00-av-tv-cctv") 25 pingpai=models.CharField(max_length=32,default="IBM") 26 sn=models.CharField(max_length=32,default="dad13sda")
 

類中各個字段含義:

 
 1         1、models.AutoField  自增列 = int(11)  2   如果沒有的話,默認會生成一個名稱為 id 的列,如果要顯示的自定義一個自增列,必須將給列設置為主鍵 primary_key=True。  3 2、models.CharField  字符串字段  4    必須 max_length 參數  5 3、models.BooleanField  布爾類型=tinyint(1)  6   不能為空,Blank=True  7 4、models.ComaSeparatedIntegerField  用逗號分割的數字=varchar  8 input: 12,345,989871234 9 10    繼承CharField,所以必須 max_lenght 參數 11 5、models.DateField  日期類型 date 12   對於參數,auto_now = True 則每次更新都會更新這個時間;auto_now_add 則只是第一次創建添加,之后的更新不再改變。 13 6、models.DateTimeField  日期類型 datetime 14    同DateField的參數 15 7、models.Decimal  十進制小數類型 = decimal 16    必須指定整數位max_digits和小數位decimal_places 17 8、models.EmailField  字符串類型(正則表達式郵箱) =varchar 18    對字符串進行正則表達式 19 9、models.FloatField  浮點類型 = double 20 10、models.IntegerField  整形 21 11、models.BigIntegerField  長整形 22   integer_field_ranges = { 23     'SmallIntegerField': (-32768, 32767), 24     'IntegerField': (-2147483648, 2147483647), 25     'BigIntegerField': (-9223372036854775808, 9223372036854775807), 26     'PositiveSmallIntegerField': (0, 32767), 27     'PositiveIntegerField': (0, 2147483647), 28    } 29 12、models.IPAddressField  字符串類型(ip4正則表達式) 30 13、models.GenericIPAddressField  字符串類型(ip4和ip6是可選的) 31    參數protocol可以是:both、ipv4、ipv6 32    驗證時,會根據設置報錯 33 14、models.NullBooleanField  允許為空的布爾類型 34 15、models.PositiveIntegerFiel  正Integer 35 16、models.PositiveSmallIntegerField  正smallInteger 36 17、models.SlugField  減號、下划線、字母、數字 37 18、models.SmallIntegerField  數字 38   數據庫中的字段有:tinyint、smallint、int、bigint 39 19、models.TextField  字符串=longtext 40 20、models.TimeField  時間 HH:MM[:ss[.uuuuuu]] 41 21、models.URLField  字符串,地址正則表達式 42 22、models.BinaryField  二進制 43 44 23、models.ImageField 圖片 字符串 45 24、models.FilePathField 文件 字符串
 

需要注意的是:

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

 

根絕自己的需要來定義這個字段和使用相應的參數。

1 class Title(models.Model): 2 title=models.CharField(max_length=32) 3 add_date=models.DateField(auto_now=True)#表示該表進行數據的插入的時候時間,當前行的數據插入的時間。 4 update_date=models.DateField(auto_now_add=True)#表示該表的該行數據進行更新的時候,記錄時間。

 

還有字段:models.ImageField  和、models.FilePathField在數據庫中保存的是圖片和文件的的路徑。

默認情況下,如果我們不指定創建 自增列(主鍵)的話,在數據庫中,默認會給我們創建一個名為:id的自增列。

更多參數:

 

 
 1 1、null=True  2   數據庫中字段是否可以為空  3 2、blank=True  4   django的 Admin 中添加數據時是否可允許空值  5 3、primary_key = False  6   主鍵,對AutoField設置主鍵后,就會代替原來的自增 id 列  7 4、auto_now 和 auto_now_add  8   auto_now 自動創建---無論添加或修改,都是當前操作的時間  9   auto_now_add 自動創建---永遠是創建時的時間 10 5、choices 11 GENDER_CHOICE = ( 12 (u'M', u'Male'), 13 (u'F', u'Female'), 14  ) 15 gender = models.CharField(max_length=2,choices = GENDER_CHOICE) 16 6、max_length 17 7、default  默認值 18 8、verbose_name  Admin中字段的顯示名稱 19 9、name|db_column  數據庫中的字段名稱 20 10、unique=True  不允許重復 21 11、db_index = True  數據庫索引 22 12、editable=True  在Admin里是否可編輯 23 13、error_messages=None  錯誤提示 24 14、auto_created=False  自動創建 25 15、help_text  在Admin中提示幫助信息 26 16、validators=[] 27 17、upload-to 28 29 更多參數
 

 

 

 

可以給我們的列設置默認值。default=''

1 email = models.EmailField()            # string,幫助admin做輸入驗證,modelform

創建完,類,我們進行數據庫的創建:執行如下2條命令!

1 python manage.py makemigrations 2 python manage.py migrate

choices:比如說性別:要么是男要么是女。如果有如下表:

 

 
1 class Gender(models.Model): 2 name=models.CharField(max_length=32) 3 4 class User_type(models.Model): 5 user_type=models.CharField(max_length=32) 6 nid=models.AutoField(primary_key=True) 7 phone_num=models.IntegerField() 8 phone_num_1=models.IntegerField() 9 gender=models.ForeignKey('Gender')
 

 

 

 

因為性別是不會改變的。如果按如上的操作,用戶類型和性別表建立多對一的情況,那么在我們查詢的時候,會給數據庫增加壓力,這時候我們可以考慮用choices。用元組來表示這個字段,用0、1來表示性別。用內存儲存的元組的來

減少表的跨表查詢。

 

 
 1 gender_choices=(  2 (0,''),  3 (1,''),  4 )  5  6 class User_type(models.Model):  7 user_type=models.CharField(max_length=32)  8 nid=models.AutoField(primary_key=True)  9 phone_num=models.IntegerField() 10 phone_num_1=models.IntegerField() 11 gender=models.IntegerField(choices=gender_choices)#前端頁面顯示的是男女,而實際上數據庫記錄的是:0和1,減少數據庫的連表操作。
 

 

 

 

2:django中如果我們想修改,表結構,比如增加一個列,在之前的sqlalchemy中只能借助於第三的模塊或者工具,但是在django中,不需要。只需要再執行如下命令既可修改表結構:

1 1 python manage.py makemigrations 2 2 python manage.py migrate

但是在執行如下的命令的時候,需要在對應的類(表)中設置相應的default的值。否則會報錯。需要注意的是:報如下錯誤,前提是該數據庫已經插入數據!!!否則不會報錯。

解決方法:在相應的類中增加的列的中,填寫默認數據:default="值",在運行命令的時候不會報錯。

1 class Title(models.Model): 2 title=models.CharField(max_length=32) 3 add_date=models.DateField(auto_now_add=True)#表示該表進行數據的插入的時候時間,當前行的數據插入的時間。 4 update_date=models.DateField(auto_now=True)#表示該表的該行數據進行更新的時候,記錄時間。 5 content=models.CharField(max_length=200,default="大話西游,永恆的經典!")

 

1 Hostinfo.objects.filter(id=val).values(id) 2 Hostinfo.objects.filter(id=val).value_list(id,email)

value:獲取結果不是對象的列表的集合。內部小元素是字典,而是列表中嵌套字典。[{'id':2},{'id':1}]

valuelist:是獲取元組的集合內嵌套元組,內部小元素是元組。((2,'1@qq.com'),(1,'2@qq.com'))              

 

學習是一種態度,堅持是質變的利器!


免責聲明!

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



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