對象關係映射(Object Relational Mapping,簡稱ORM)模式是一種爲了解決面向對象與關係數據庫存在的互不匹配的現象的技術。python
簡單的說,ORM是經過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關係數據庫中。mysql
ORM在業務邏輯層和數據庫層之間充當了橋樑的做用。git
DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "NAME": "你的數據庫名稱", # 須要本身手動建立數據庫 "USER": "數據庫用戶名", "PASSWORD": "數據庫密碼", "HOST": "數據庫IP", "POST": 3306 } }
import pymysql pymysql.install_as_MySQLdb()
from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
first_name 和 last_name 是模型的字段。每一個字段被指定爲一個類屬性,每一個屬性映射到一個數據庫列。
上面的 Person 模型將會像這樣建立一個數據庫表:sql
CREATE TABLE myapp_person ( "id" serial NOT NULL PRIMARY KEY, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL );
一些說明:數據庫
表myapp_person的名稱是自動生成的,若是你要自定義表名,須要在model的Meta類中指定 db_table 參數,強烈建議使用小寫表名,特別是使用MySQL做爲後端數據庫時。
id字段是自動添加的,若是你想要指定自定義主鍵,只需在其中一個字段中指定 primary_key=True 便可。若是Django發現你已經明確地設置了Field.primary_key,它將不會添加自動ID列。django
字段名 | 說明 |
---|---|
AutoField | int自增列,需填入參數 primary_key=True。當model中若是沒有自增列,則自動會建立一個列名爲id的列。 |
IntegerField | 整數類型,範圍在 -2147483648 to 2147483647。 |
CharField | 字符類型,必須提供max_length參數, max_length表示字符長度。 |
DateField | 日期字段,日期格式 YYYY-MM-DD,至關於Python中的datetime.date()實例。 |
DateTimeField | 日期時間字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],至關於Python中的datetime.datetime()實例。 |
字段名 | 說明 |
---|---|
BigAutoField(AutoField) | - bigint自增列,必須填入參數 primary_key=True 注:當model中若是沒有自增列,則自動會建立一個列名爲id的列 |
SmallIntegerField(IntegerField) | - 小整數 -32768 ~ 32767 |
PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) | - 正小整數 0 ~ 32767 |
PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) | - 正整數 0 ~ 2147483647 |
BigIntegerField(IntegerField) | - 長整型(有符號的) -9223372036854775808 ~ 9223372036854775807 |
BooleanField(Field) | - 布爾值類型 |
NullBooleanField(Field): | - 能夠爲空的布爾值 |
TextField(Field) | -文本類型 |
EmailField(CharField) | - 字符串類型,Django Admin以及ModelForm中提供驗證機制 |
IPAddressField(Field) | - 字符串類型,Django Admin以及ModelForm中提供驗證 IPV4 機制 |
GenericIPAddressField(Field) | - 字符串類型,Django Admin以及ModelForm中提供驗證 Ipv4和Ipv6 - 參數:protocol,用於指定Ipv4或Ipv6, 'both',"ipv4","ipv6"unpack_ipv4, 若是指定爲True,則輸入::ffff:192.0.2.1時候,可解析爲192.0.2.1,開啓此功能,須要protocol="both" |
URLField(CharField) | - 字符串類型,Django Admin以及ModelForm中提供驗證 URL |
SlugField(CharField) | - 字符串類型,Django Admin以及ModelForm中提供驗證支持 字母、數字、下劃線、鏈接符(減號) |
CommaSeparatedIntegerField(CharField) | - 字符串類型,格式必須爲逗號分割的數字 |
UUIDField(Field) | - 字符串類型,Django Admin以及ModelForm中提供對UUID格式的驗證 |
FilePathField(Field) | - 字符串,Django Admin以及ModelForm中提供讀取文件夾下文件的功能 - 參數:path: 文件夾路徑;match=None:正則匹配;recursive=False:遞歸下面的文件夾;allow_files=True:容許文件;allow_folders=False:容許文件夾; |
FileField(Field) | - 字符串,路徑保存在數據庫,文件上傳到指定目錄 - 參數:upload_to = "" :傳文件的保存路徑;storage = None :存儲組件,默認django.core.files.storage.FileSystemStorage |
ImageField(FileField) | - 字符串,路徑保存在數據庫,文件上傳到指定目錄 - 參數:upload_to = "":上傳文件的保存路徑; |
storage = None:存儲組件,默認django.core.files.storage.FileSystemStorage;width_field=None, 上傳圖片的高度保存的數據庫字段名(字符串;height_field=None:上傳圖片的寬度保存的數據庫字段名(字符串); | |
DateField(DateTimeCheckMixin, Field) | - 日期格式 YYYY-MM-DD |
TimeField(DateTimeCheckMixin, Field) | - 時間格式 HH:MM[:ss[.uuuuuu]] |
DurationField(Field) | - 長整數,時間間隔,數據庫中按照bigint存儲,ORM中獲取的值爲datetime.timedelta類型 |
FloatField(Field) | - 浮點型 |
DecimalField(Field) | - 10進制小數 - 參數:max_digits:小數總長度;decimal_places:小數位長度 |
BinaryField(Field) | - 二進制類型 |