一腥例、ORM介紹
1.什么是ORM
- ORM 全拼Object-Relation Mapping.
- 中文意為 對(duì)象-關(guān)系映射.
- 在MVC/MVT設(shè)計(jì)模式中的Model模塊中都包括ORM
2.ORM優(yōu)勢(shì)
(1)只需要面向?qū)ο缶幊? 不需要面向數(shù)據(jù)庫(kù)編寫代碼.
- 對(duì)數(shù)據(jù)庫(kù)的操作都轉(zhuǎn)化成對(duì)類屬性和方法的操作.
- 不用編寫各種數(shù)據(jù)庫(kù)的sql語(yǔ)句.
(2)實(shí)現(xiàn)了數(shù)據(jù)模型與數(shù)據(jù)庫(kù)的解耦, 屏蔽了不同數(shù)據(jù)庫(kù)操作上的差異.
- 不在關(guān)注用的是mysql翁巍、oracle...等.
- 通過(guò)簡(jiǎn)單的配置就可以輕松更換數(shù)據(jù)庫(kù), 而不需要修改代碼.
3.ORM劣勢(shì)
- 相比較直接使用SQL語(yǔ)句操作數(shù)據(jù)庫(kù),有性能損失.
- 根據(jù)對(duì)象的操作轉(zhuǎn)換成SQL語(yǔ)句,根據(jù)查詢的結(jié)果轉(zhuǎn)化成對(duì)象, 在映射過(guò)程中有性能損失.
4.ORM和數(shù)據(jù)庫(kù)關(guān)系:
- 在Django中model是你數(shù)據(jù)的單一公你、明確的信息來(lái)源。它包含了你存儲(chǔ)的數(shù)據(jù)的重要字段和行為驯嘱。通常镶苞,一個(gè)模型(model)映射到一個(gè)數(shù)據(jù)庫(kù)表.
基本情況:
- 每個(gè)模型都是一個(gè)Python類,它必須繼承models.Model類
django中遵循 Code Frist 的原則鞠评,即:先創(chuàng)建類茂蚓,根據(jù)代碼中定義的類來(lái)自動(dòng)生成數(shù)據(jù)庫(kù)表。
模型的每個(gè)屬性都代表一個(gè)數(shù)據(jù)庫(kù)字段剃幌。
綜上所述聋涨,Django為您提供了一個(gè)自動(dòng)生成的數(shù)據(jù)庫(kù)訪問(wèn)API。
對(duì)象-關(guān)系映射
二负乡、創(chuàng)建一個(gè)簡(jiǎn)單的表
1 選擇數(shù)據(jù)庫(kù)類型
- Django默認(rèn)自帶sqllite的數(shù)據(jù)庫(kù)驅(qū)動(dòng),默認(rèn)使用sqllite的數(shù)據(jù)庫(kù)牍白,可在project文件下的settings.py中修改配置
A)sqllte配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
B)mysql配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'HttpRunner', # 新建數(shù)據(jù)庫(kù)名,創(chuàng)建的表都在這下面
'USER': 'root', # 數(shù)據(jù)庫(kù)登錄名
'PASSWORD': 'Hst888888', # 數(shù)據(jù)庫(kù)登錄密碼
'HOST': '192.168.91.45', # 數(shù)據(jù)庫(kù)所在服務(wù)器ip地址
'PORT': '3306', # 監(jiān)聽(tīng)端口 默認(rèn)3306即可
}
}
C)注意事項(xiàng)
django默認(rèn)導(dǎo)入的驅(qū)動(dòng)是MySQLdb模塊【適用于python2】
python3需要的驅(qū)動(dòng)是pymysql,我們需要在項(xiàng)目名文件下的init_.py(settings.py同級(jí)的文件)中添加如下代碼:
import pymysql
pymysql.install_as_Mysqldb()
以上代碼就是告訴python使用pymysql,不要使用MySQLdb
2 注冊(cè)應(yīng)用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',#注冊(cè)APP敬鬓,上面都是默認(rèn)值
]
3 創(chuàng)建類
在app01/models.py 中寫下以下代碼:
from django.db import models
#在數(shù)據(jù)庫(kù)中創(chuàng)建表名為:app01_userinfo
#Django會(huì)自動(dòng)將應(yīng)用名稱添加在表前面
class UserInfo(models.Model):#創(chuàng)建的類必須繼承models.Model
#當(dāng)model中如果沒(méi)有自增列淹朋,則自動(dòng)會(huì)創(chuàng)建一個(gè)列名為id的主鍵
username=models.CharField(max_length=32)
password=models.CharField(max_length=32)
4 生成數(shù)據(jù)表
完成以上操作笙各,接下來(lái)就是根據(jù)models中的類在數(shù)據(jù)庫(kù)中生成對(duì)應(yīng)的表
命令行窗口切換到項(xiàng)目根目錄執(zhí)行以下操作:
python manage.py makemigrations #在app01/migrations下會(huì)生成數(shù)據(jù)遷移腳本
python manage.py migrate #應(yīng)用到db生成數(shù)據(jù)表
到這一步一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)就創(chuàng)建完成了