Django之模型層-瞭解ORM
阿新 • • 發佈:2018-12-11
ORM(物件-關係-對映)簡單使用
ORM實現了資料模型與資料庫的解耦合,即資料模型的設計不需要指定特定的資料庫,通過python程式碼可以直接對資料庫實現增刪改查
MySQL語法
#sql中的表 #建立表: CREATE TABLE employee( id INT PRIMARY KEY auto_increment , name VARCHAR (20), gender BIT default 1, birthday DATA , department VARCHAR (20), salary DECIMAL (8,2) unsigned, ); #sql中的表紀錄 #新增一條表紀錄: INSERT employee (name,gender,birthday,salary,department) VALUES ("alex",1,"1985-12-12",8000,"保潔部"); #查詢一條表紀錄: SELECT * FROM employee WHERE age=24; #更新一條表紀錄: UPDATE employee SET birthday="1989-10-24" WHERE id=1; #刪除一條表紀錄: DELETE FROM employee WHERE name="alex"
使用python實現資料庫操作
class Employee(models.Model): id=models.AutoField(primary_key=True) name=models.CharField(max_length=32) gender=models.BooleanField() birthday=models.DateField() department=models.CharField(max_length=32) salary=models.DecimalField(max_digits=8,decimal_places=2) #python的類物件 #新增一條表紀錄: emp=Employee(name="alex",gender=True,birthday="1985-12-12",epartment="保潔部") emp.save() #查詢一條表紀錄: Employee.objects.filter(age=24) #更新一條表紀錄: Employee.objects.filter(id=1).update(birthday="1989-10-24") #刪除一條表紀錄: Employee.objects.filter(name="alex").delete()
建立名為book的app,在book下的models.py中建立模型:
class Book(models.Model): #自增,設定primary_key(唯一且自增) id = models.AutoField(primary_key=True) #字串,相當於sql語句中的char title = models.CharField(max_length=32) #時間 pub_date = models.DateField() #小數,後面引數最大八位數包含兩個小數位 price = models.DecimalField(max_digits=8,decimal_places=2) publish = models.CharField(max_length=32)
settings配置以及生成表模型
將模型轉為mysql資料庫中的表,需要在settings中配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'bms', # 要連線的資料庫,連線前需要建立好
'USER':'root', # 連線資料庫的使用者名稱
'PASSWORD':'', # 連線資料庫的密碼
'HOST':'127.0.0.1', # 連線主機,預設本級
'PORT':3306 # 埠 預設3306
}
}
django預設你匯入的驅動是MySQLdb,可是MySQLdb 對於py3有很大問題,所以我們需要的驅動是PyMySQL 所以,我們只需要找到專案名檔案下的init,在裡面寫入:
import pymysql
pymysql.install_as_MySQLdb()
並且需要確保settings.py檔案中INSTALLED_APPS寫有自己建立的應用程式名稱
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
"book"
]
列印orm轉換過程中的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',
},
}
}
最後通過兩條資料庫遷移命令即可在指定的資料庫中建立表 :
python manage.py makemigrations
python manage.py migrate
如果資料庫表字段已經遷移過了(執行了上面兩條語句),需要新增額外的欄位,可以直接再模型內新增欄位,不過新新增的欄位需要設定預設值default,然後再執行資料庫遷移