線程同步 線程安全 要保證線程安全有兩個前提: 程式調用了多線程。 多個線程操作共同的變數 以上兩個條件滿足後,程式就有可能觸犯線程不安全的問題 什麼是線程不安全? 舉例說明:假如一場演唱會需要售賣門票,有三個售票口,A,B,C。它們會同時售票,假如一共只有100張票,那麼當100張票售賣完後,售票 ...
這篇筆記介紹欄位的類型 Field Type。
Django 的model 下的 field 對應的是 MySQL 中的表欄位,而我們定義的 field 的類型則對應 MySQL 中的欄位類型。
本次主要介紹以下幾種:
- CharField
- IntegerField
- DateField/DateTimeField
- BooleanField
- FloatField
- TextField
- DecimalField
其中,比較重要的 ForeignKey,ManyToMany,OneToOne 類型的我們單開筆記講解
1、CharField
字元型
對應的是 MySQL 中的 varchar 類型,使用示例如下:
class TestModel(models.Model):
name = models.CharField(max_length=256)
其中,max_length 為必填屬性,用於創建欄位的時候確認欄位最大長度
欄位的其他屬性,比如 default,或者 unique 或者 db_index 這些上一篇筆記中提到的屬性,都可以根據需要添加。
2、IntegerField
整型
對應的是 MySQL 的 int 類型,使用示例如下:
class TestModel(models.Model):
page = models.IntegerField(default=0)
該欄位無必填屬性,相關屬性可根據需要自行添加。
3、DateField/DateTimeField
分別對應 MySQL 中的 date 和 datetime 類型,使用示例如下:
class TestModel(models.Model):
updated_date = models.DateField()
updated_time = models.DateTimeField(auto_now=True)
created_time = models.DateTimeField(auto_now_add=True)
無必填屬性
auto_now:可作為更新時間欄位的屬性,後續在更改欄位數據的時候可不用手動修改該值,系統會自動更新該值為當前時間
auto_now_add:可作為創建時間欄位的屬性,在某條數據建立之初不用手動填寫,系統即為其自動寫入當前時間,且後續其他欄位的更改不會更改該值
以上兩個屬性預設為 False
4、BooleanField
對應 MySQL 中的 tinyint 類型,使用示例如下:
class TestModel(models.Model):
is_right = models.BooleanField(default=False)
使用 Django 操作數據,寫入這個欄位的時候,我們可以寫入 0/1,或者 False/True 這兩個值。
因為 MySQL 中存入的時候 tinyint 類型的數據,所以其實在 資料庫中 這個欄位的值是不止 0/1 這兩個可選值的,但是如果通過 Django 寫入,系統會對寫入的數據做規範,僅能寫入 0/1 或 False/True,寫入其他數據會返回報錯。
註: 如果直接操作資料庫,是可以寫入 0/1 之外的數據的
5、FloatField
對應 MySQL 中的 DOUBLE 類型,使用示例如下:
class TestModel(models.Model):
price = models.FloatField()
6、TextField
對應 MySQL 中的 LONGTEXT 欄位,使用示例如下:
class TestModel(models.Model):
text_field = models.TextField()
如果需要存儲字元長度比較長的數據,可以使用這個類。
7、DecimalField
對應於 MySQL 中的 decimal 欄位,使用示例如下:
class TestModel(models.Model):
decimal_field = models.DecimalField(decimal_places=5, max_digits=20, default=0)
必填參數 為:max_digits、decimal_places
其中,max_digits 為可以儲存的最大位數,這個數字必須大於或等於 decimal_places
decimal_places 為與數字一起存儲的小數位數
也就是說如果要存儲最高為 999.99 的數字,精度為小數點後兩位,則為:
models.DecimalField(max_digits=5, decimal_places=2)
一般來說,如果是對精度要求比較嚴格的情況下,可以使用這個欄位類型。
以上就是這篇筆記的全部內容,在接下來幾篇筆記中將會介紹 ForeignKey,ManyToMany,OneToOne 也就是外鍵等欄位類型。
原文鏈接:Django筆記五之欄位類型
本文首發於本人微信公眾號:Django筆記。
如果想獲取更多相關文章,可掃碼關註閱讀: