ORM框架介紹

對象關系映射(Object Relational Mapping,簡稱ORM)是通過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關系數據庫中。

Python中的類 ---> 表

Python里面的類屬性 ---> 字段

python 里面的類對象 --->? 數據庫表里的1條數據

我們是面向對象的。當對象的信息發生變化的時候,我們就需要把對象的信息保存在關系數據庫中。程序員會在自己的業務邏輯代碼中夾雜很多SQL語句用來增加、讀取、修改、刪除相關數據,而這些代碼通常都是重復的。

ORM的出現充當了對象和數據庫層次的橋梁作用。

優點:

提高我們的開發效率

開發人員技術參差不齊,大神寫的sql優化非常好

缺點:

查詢效率受影響 關系數據庫技能退化

Django步驟

要想一個頁面展示在用戶面前

1.打開瀏覽器,輸入網址,發起請求

2,接受請求 ,響應內容

-url要配置---> 將來 瀏覽器,輸入的路徑

url(r'^index/')

https://127.0.0.1:8000/index

-視圖要寫---> 用戶輸入 網址之后調用的內容

def index(request):

? ? return render(request,'index.html')

def + 視圖函數的函數名稱  第一個參數 是request

render 返回一個模板 (request,html)

3. 模型  models.py 這個模塊   mvt

django給我們提供了一個orm框架

因為有了這個框架 我們可以不需要去寫各種 sql語句

orm   類---> 表  屬性對應--->字段? 實例對象--->1行數據

屬性類型

當前選擇的數據庫支持字段的類型

渲染管理表單時使用的默認html控件

在管理站點最低限度的驗證 django會為表創建自動增長的主鍵列,每個模型只能有一個主鍵列,如果使用選項設置某屬性為主鍵列后django不會再創建自動增長的主鍵列。

默認創建的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。

字段類型

AutoField:自動增長的IntegerField,通常不用指定,不指定時Django會自動創建屬性名為id的自動增長屬性。(必須填入參數primary_key=True)

BooleanField:布爾字段,值為True或False。

NullBooleanField:支持Null、True、False三種值。

CharField(max_length=字符長度):字符串。

映射到數據庫會是varchar

參數max_length表示最大字符個數。

TextField:大文本字段,一般超過4000個字符時使用。

IntegerField:整數。

DecimalField(max_digits=None, decimal_places=None):十進制浮點數。

參數max_digits表示總位數。

參數decimal_places表示小數位數。

FloatField:浮點數。

DateField[auto_now=False, auto_now_add=False]):日期。

參數auto_now表示每次保存對象時,自動設置該字段為當前時間,用于"最后一次修改"的時間戳,它總是使用當前日期,默認為false。

參數auto_now_add表示當對象第一次被創建時自動設置當前時間,用于創建的時間戳,它總是使用當前日期,默認為false。

參數auto_now_add和auto_now是相互排斥的,組合將會發生錯誤。

TimeField:時間,參數同DateField。

DateTimeField:日期時間,參數同DateField。

FileField:上傳文件字段。

ImageField:繼承于FileField,對上傳的內容進行校驗,確保是有效的圖片。

選項 約束

null:如果為True,表示允許為空,默認值是False。

blank:如果為True,則該字段允許為空白,默認值是False。

對比:null是數據庫范疇的概念,blank是表單驗證范疇的。

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

db_index:若值為True, 則在表中會為此字段創建索引,默認值是False。

default:默認值。

primary_key:若為True,則該字段會成為模型的主鍵字段,默認值是False,一般作為AutoField的選項使用。

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

4. 不用sqllite 我們使用mysql

如何去配置我們的mysql

4.1 settings.py DATABASE

DATABASES = { 'default': { 'ENGINE':'django.db.backends.mysql',# 數據庫類型

'NAME': 'test1',# 數據庫的名稱,django不會直接給我們創建數據庫需要我們手動創建

'USER': 'root',#數據庫用戶

'PASSWORD': '123456',# 數據庫密碼

'HOST': '127.0.0.1', 'PORT': '3306',# 端口號 } }

4.2 我們需要安裝一個 python連接mysql的驅動  pymysql

4.3 我們需要把這個驅動 添加到項目里面來

項目下的__init__文件里:

import pymysql

pymysql.install_as_MySQLdb()

5. 設計完python的類(表) 不意味著 數據庫里面就有這張表

5.1  生成遷移文件

python manage.py makemigrations

5.2  執行遷移

python manage.py migrate?

同步到數據庫,創表成功,可以插入數據

6. 查詢

6.1 查詢 id=1 的書 =? excat

list = BookInfo.objects.filetr(id=1)

list = BookInfo.objects.filetr(id__exact=1)

mysql日志:

配置:

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

然后執行

sudo service mysql restart

使用如下命令打開mysql日志文件。

sudo tail -f /var/log/mysql/mysql.log

條件查詢

1.判等 ------>? ?exact

2.模糊查詢 ----->? contains

? ? 查詢以指定值開頭 -----> startswith

????查詢以指定值結尾 ------>? endswith??

3.空值查詢  ---->? isnull (是否為null)

4.范圍查詢 ------>? ?in (是否包含在范圍內)

5.比較查詢 ----->? gt、gte、lt、lte:大于、大于等于、小于、小于等于。

6.日期查詢 ---- >year、month、day、week_day、hour、minute、second:對日期時間類型的屬性進行運算。

F對象和Q對象

查詢兩個屬性的比較會使用F對象。

多個過濾器逐個調用表示邏輯與關系,同sql語句中where部分的and關鍵字。

如果需要實現邏輯或or的查詢,需要使用Q()對象結合|運算符,Q對象被義在django.db.models中。

聚合函數

使用aggregate()過濾器調用聚合函數。聚合函數包括:Avg,Count,Max,Min,Sum,被定義在django.db.models中。

aggregate的返回值是一個字典類型

使用count時一般不使用aggregate()過濾器。

注意count函數的返回值是一個數字。

查詢集

返回查詢集的過濾器如下:

all():返回所有數據。

filter():返回滿足條件的數據。

exclude():返回滿足條件之外的數據,相當于sql語句中where部分的not關鍵字。

order_by():對結果進行排序。

返回單個值的過濾器如下:

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

count():返回當前查詢結果的總條數。

aggregate():聚合,返回一個字典。

判斷某一個查詢集中是否有數據:

exists():判斷查詢集中是否有數據,如果有則返回True,沒有則返回False。

查詢集兩大特性

惰性執行:創建查詢集不會訪問數據庫,直到調用數據時,才會訪問數據庫,調用數據的情況包括迭代、序列化、與if合用。

緩存:使用同一個查詢集,第一次使用時會發生數據庫的查詢,然后把結果緩存下來,再次使用這個查詢集時會使用緩存的數據。

限制查詢集

可以對查詢集進行取下標或切片操作,等同于sql中的limit和offset子句。不支持負數索引。

對查詢集進行切片后返回一個新的查詢集,不會立即執行查詢。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 關于Mongodb的全面總結 MongoDB的內部構造《MongoDB The Definitive Guide》...
    中v中閱讀 32,012評論 2 89
  • MYSQL 基礎知識 1 MySQL數據庫概要 2 簡單MySQL環境 3 數據的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 7,857評論 5 116
  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查詢集API 參...
    陽光小鎮少爺閱讀 3,852評論 0 8
  • 剛上完課LILY就打來電話,說梁梁頭疼,我心一下慌了,梁梁長這么大還真沒頭疼過,也許以前小頭也疼過但不會表達,急忙...
    歲月留香99999閱讀 246評論 0 0
  • 今天早上提了離職,突然心情好了很多。 在商場的企劃部工作了一個月,完全迷茫的一個月。一個月前,我剛結束ui設計的學...
    花七開閱讀 360評論 0 1