Django:ORM簡介與配置
阿新 • • 發佈:2022-12-09
目錄
一、Django連線資料庫
由於Django自帶的SQLite3功能較少,主要用於專案中的小型測試,在實際專案中都會替換成MySQL
1.使用MySQL資料庫首先安裝驅動程式
pip install PyMySQL
- Django預設的資料庫配置需要我們更新
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
2.Django配置MySQL
第一步:修改DATABASES配置資訊
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day51',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': 'root123',
'CHARSET': 'utf8'
}
第二步:
-
django1.X版本需要在專案目錄下或者app目錄下的
__init__.py
讓pymysql以MySQLDB的執行模式和Django的ORM對接執行,讓Django的ORM能以mysqldb的方式來呼叫PyMySQL。
import pymysql
pymysql.install_as_MySQLdb()
- django2.X及以上都可以直接通過下載mysqlclient模組解決
終端中執行
pip install mysqlclient
3.檢視執行的SQL語句的配置
如果想在建立表的時候檢視執行的SQL語句,可以在settings.py中新增
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level': 'DEBUG', }, } }
二、ORM簡介
1.ORM:物件關係對映
ORM的作用簡單來說是Django中自帶的,能夠讓不會SQL語句的python程式設計師,使用python面向物件的語法來操作資料庫的一種方式
Pyhton | 對映資料庫中 |
---|---|
類 | 表 |
物件 | 記錄 |
物件點屬性 | 資料獲取欄位對應的值 |
ORM缺點:
ORM由於高度封裝了SQL語句,所以執行效率較低
- 我們可以通過以下步驟來使用django的資料庫操作:
- 配置資料庫連線資訊
- 在models.py中定義模型類
- 生成資料庫遷移檔案並執行遷檔案[注意:資料遷移是一個獨立的功能,這個功能在其他web框架未必和ORM一塊的]
- 通過模型類物件提供的方法或屬性完成資料表的增刪改查操作
2.ORM基本操作
1.先在models.py中編寫模型類
# ORM object relationship mapping 模型類
class BoysInfo(models.Model):
# id int primary key auto_increment
id = models.AutoField(primary_key=True) # 欄位名=欄位型別 + 約束條件
# name varchar(32)
name = models.CharField(max_length=32)
# age int
age = models.IntegerField()
2.執行資料庫遷移相關命令
- 在終端中,將操作記錄在migrations目錄下,之後就可以操作了
python3 manage.py makemigrations
- 將資料庫遷移到資料庫中
python3 manage.py migrate
每次執行相關資料庫的操作,都需要執行這兩條命令同步資料庫
3.ORM基本語句
使用ORM需要在views.py
檔案中匯入models
from app01 import models
-
建立表
models.類名.objects.create()
-
建立表
models.類名.objects.filter()
-
建立表
models.類名.objects.update()
-
建立表
models.類名.objects.delete()
報錯資訊記錄
1.name '_mysql' is not defined
- 解決方案:在
__init__.py
中新增
import pymysql
pymysql.install_as_MySQLdb()
'str' object has no attribute 'decode'
- 解決方案:點進去連結,將decode改成encode