1. 程式人生 > >Django之模型層-瞭解ORM

Django之模型層-瞭解ORM

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,然後再執行資料庫遷移