Django ORM

對象關係映射(Object Relational Mapping,簡稱ORM)模式是一種爲了解決面向對象與關係數據庫存在的互不匹配的現象的技術。python

簡單的說,ORM是經過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關係數據庫中。mysql

ORM在業務邏輯層和數據庫層之間充當了橋樑的做用。git

1、如何在Django項目中使用mysql數據庫?

1. 在Django項目的settings.py文件中,配置數據庫鏈接信息:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "你的數據庫名稱",  # 須要本身手動建立數據庫
        "USER": "數據庫用戶名",
        "PASSWORD": "數據庫密碼",
        "HOST": "數據庫IP",
        "POST": 3306
    }
}

2. 在Django項目的__init__.py文件中寫以下代碼,告訴Django使用pymysql模塊鏈接MySQL數據庫:

import pymysql

pymysql.install_as_MySQLdb()

2、Django中的映射關係

867021-20180325235218756-104285201.png

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

3、經常使用字段

字段名 說明
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()實例。

4、其餘不經常使用字段

字段名 說明
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) - 二進制類型
相關文章
相關標籤/搜索