ORM

ORM

ORM 是’對象-關(guān)系-映射‘的簡稱主要任務(wù)

*1根據(jù)對象的類型生成表結(jié)構(gòu)

*2將對象细移、列表的操作欢唾,轉(zhuǎn)換為sql語句

*3將sql查詢到的結(jié)果轉(zhuǎn)換為對象且警、列表

這極大的減輕了開發(fā)人員的工作量,不需要面對數(shù)據(jù)變更而導(dǎo)致的無效勞動礁遣。

使用mysql數(shù)據(jù)庫

*在mysql中創(chuàng)建數(shù)據(jù)庫

create databases test2 charset=utf8

*打開settings.py文件斑芜,修改DATABASES項(xiàng)

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME': 'test2',

'USER': '用戶名',

'PASSWORD': '密碼',

'HOST': '數(shù)據(jù)庫服務(wù)器ip,本地可以使用localhost',

'PORT': '端口祟霍,默認(rèn)為3306',

}

}

*注意:需要在我們得站點(diǎn)得init文件

import pymysql

pymysql.install_as_MySQLdb()

字段類型

AutoField:一個根據(jù)實(shí)際ID自動增長的IntegerField杏头,通常不指定

如果不指定盈包,一個主鍵字段將自動添加到模型中

BooleanField:true/false 字段,此字段的默認(rèn)表單控制是CheckboxInput

NullBooleanField:支持null醇王、true呢燥、false三種值

CharField(max_length=字符長度):字符串,默認(rèn)的表單樣式是 TextInput

TextField:大文本字段寓娩,一般超過4000使用叛氨,默認(rèn)的表單控件是Textarea

IntegerField:整數(shù)

DecimalField(max_digits=None, decimal_places=None):使用python的Decimal實(shí)例表示的十進(jìn)制浮點(diǎn)數(shù)

DecimalField.max_digits:位數(shù)總數(shù)

DecimalField.decimal_places:小數(shù)點(diǎn)后的數(shù)字位數(shù)

FloatField:用Python的float實(shí)例來表示的浮點(diǎn)數(shù)

DateField([auto_now=False, auto_now_add=False]):使用Python的datetime.date實(shí)例表示的日期

參數(shù)DateField.auto_now:每次保存對象時,自動設(shè)置該字段為當(dāng)前時間棘伴,用于”最后一次修改”的時間戳寞埠,它總是使用當(dāng)前日期,默認(rèn)為false

參數(shù)DateField.auto_now_add:當(dāng)對象第一次被創(chuàng)建時自動設(shè)置當(dāng)前時間焊夸,用于創(chuàng)建的時間戳仁连,它總是使用當(dāng)前日期,默認(rèn)為false

該字段默認(rèn)對應(yīng)的表單控件是一個TextInput. 在管理員站點(diǎn)添加了一個JavaScript寫的日歷控件阱穗,和一個“Today”的快捷按鈕饭冬,包含了一個額外的invalid_date錯誤消息鍵

auto_now_add, auto_now, and default 這些設(shè)置是相互排斥的,他們之間的任何組合將會發(fā)生錯誤的結(jié)果

TimeField:使用Python的datetime.time實(shí)例表示的時間颇象,參數(shù)同DateField

DateTimeField:使用Python的datetime.datetime實(shí)例表示的日期和時間伍伤,參數(shù)同DateField

FileField:一個上傳文件的字段

ImageField:繼承了FileField的所有屬性和方法,但對上傳的對象進(jìn)行校驗(yàn)遣钳,確保它是個有效的image

字段的選擇

通過字段選項(xiàng)扰魂,可以實(shí)現(xiàn)對字段的約束

在字段對象時通過關(guān)鍵字參數(shù)指定

null:如果為True,Django 將空值以NULL 存儲到數(shù)據(jù)庫中蕴茴,默認(rèn)值是 False

blank:如果為True劝评,則該字段允許為空白,默認(rèn)值是 False

對比:null是數(shù)據(jù)庫范疇的概念倦淀,blank是表單驗(yàn)證證范疇的

db_column:字段的名稱蒋畜,如果未指定,則使用屬性的名稱

db_index:若值為 True, 則在表中會為此字段創(chuàng)建索引

default:默認(rèn)值

primary_key:若為 True, 則該字段會成為模型的主鍵字段

unique:如果為 True, 這個字段在表中必須有唯一值

元選項(xiàng)

在模型類中定義類Meta撞叽,用于設(shè)置元信息

元信息db_table:定義數(shù)據(jù)表名稱姻成,推薦使用小寫字母,數(shù)據(jù)表的默認(rèn)名稱

_

ordering:對象的默認(rèn)排序字段愿棋,獲取對象的列表時使用科展,接收屬性構(gòu)成的列表

class BookInfo(models.Model):

...

class Meta():

ordering = ['id']**strong text**

字符串前加-表示倒序,不加-表示正序

class BookInfo(models.Model):

...

class Meta():

ordering = ['-id']

排序會增加數(shù)據(jù)庫的開銷

類的屬性

objects:是Manager類型的對象糠雨,用于與數(shù)據(jù)庫進(jìn)行交互

當(dāng)定義模型類時沒有指定管理器才睹,則Django會為模型類提供一個名為objects的管理器

查詢集

返回查詢集的方法,稱為過濾器

all()

filter()

exclude()

order_by()

values():一個對象構(gòu)成一個字典,然后構(gòu)成一個列表返回

filter(鍵1=值1,鍵2=值2)

等價于

filter(鍵1=值1).filter(鍵2=值2)

get():返回單個滿足條件的對象

如果未找到會引發(fā)”模型類.DoesNotExist”異常 *

如果多條被返回琅攘,會引發(fā)”模型類.MultipleObjectsReturned”異常

count():返回當(dāng)前查詢的總條數(shù)

first():返回第一個對象

last():返回最后一個對象

exists():判斷查詢集中是否有數(shù)據(jù)垮庐,如果有則返回True

限制查詢集

查詢集返回列表,可以使用下標(biāo)的方式進(jìn)行限制坞琴,等同于sql中的limit和offset子句

注意:不支持負(fù)數(shù)索引

使用下標(biāo)后返回一個新的查詢集哨查,不會立即執(zhí)行查詢

如果獲取一個對象,直接使用[0]置济,等同于[0:1].get()解恰,但是如果沒有數(shù)據(jù),[0]引發(fā)IndexError異常浙于,[0:1].get()引發(fā)DoesNotExist異常

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市挟纱,隨后出現(xiàn)的幾起案子羞酗,更是在濱河造成了極大的恐慌,老刑警劉巖紊服,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件檀轨,死亡現(xiàn)場離奇詭異,居然都是意外死亡欺嗤,警方通過查閱死者的電腦和手機(jī)参萄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煎饼,“玉大人讹挎,你說我怎么就攤上這事∵壕粒” “怎么了筒溃?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沾乘。 經(jīng)常有香客問我怜奖,道長,這世上最難降的妖魔是什么翅阵? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任歪玲,我火速辦了婚禮,結(jié)果婚禮上掷匠,老公的妹妹穿的比我還像新娘滥崩。我一直安慰自己,他們只是感情好槐雾,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布夭委。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪株灸。 梳的紋絲不亂的頭發(fā)上崇摄,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音慌烧,去河邊找鬼逐抑。 笑死,一個胖子當(dāng)著我的面吹牛屹蚊,可吹牛的內(nèi)容都是我干的厕氨。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼汹粤,長吁一口氣:“原來是場噩夢啊……” “哼命斧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嘱兼,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤国葬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后芹壕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汇四,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年踢涌,在試婚紗的時候發(fā)現(xiàn)自己被綠了通孽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡睁壁,死狀恐怖背苦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情堡僻,我是刑警寧澤糠惫,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站钉疫,受9級特大地震影響硼讽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜牲阁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一固阁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧城菊,春花似錦备燃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春况褪,著一層夾襖步出監(jiān)牢的瞬間撕贞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工测垛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捏膨,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓食侮,卻偏偏與公主長得像号涯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锯七,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理链快,服務(wù)發(fā)現(xiàn),斷路器起胰,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • 點(diǎn)擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 13,708評論 0 15
  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查詢集API 參...
    陽光小鎮(zhèn)少爺閱讀 3,817評論 0 8
  • 在多數(shù)人看來久又,小貓可能不如小狗招人喜歡,可能因?yàn)樗鼈儾粔蛑艺\又缺點(diǎn)多多效五,饞貓、懶貓炉峰、病貓畏妖、好奇害死貓……這些專...
    七散閱讀 344評論 1 0
  • 讀書筆記: 古代硬幣有正反兩面,其中一面是國王的頭像疼阔,代表著世俗的權(quán)力戒劫;另一面則是上帝的形象。 三條準(zhǔn)則:尊重友好...
    梅哩哆閱讀 741評論 0 0