Django框架2(模板和ORM)

  • 模板同jinja2,這裏再也不詳述
  • ORM配置同redis,也在settings.py文件中配置
  • 這裏默認配置爲sqlite
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
  • 修改成mysql配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',  # 數據庫主機
        'PORT': 3306,  # 數據庫端口
        'USER': 'root',  # 數據庫用戶名
        'PASSWORD': 'xxxxx',  # 數據庫用戶密碼
        'NAME': 'django_test'  # 數據庫名字
    }
}
  • 這裏要注意要使用mysql須要先安裝pymysql: pip install PyMySQL 而後在初始化(在工程下的__init__.py)導入
from pymysql import install_as_MySQLdb
install_as_MySQLdb()
  • 模型類均被定義在對應子模塊的models.py中,不一樣子模塊分別定義,模型類一樣須要繼承自Models,須要導入:from django.db import models
  • 定義class繼承自models.Model
class Some(models.Model):
    title = models.CharField(max_length=20)
    class Meta:
        db_table = 't_some'  # 指明數據庫表名
  • 數據庫遷移
    • 1.生成遷移文件:python manage.py makemigrations
    • 2.遷移到數據庫:python manage.py migrate
  • 數據庫操做
      • 1.save:經過模型對象,並給模型對象的屬性賦值,最後調用.save()方法保存
      book = User()
      user.name = '王麻子'
      user.age = 19
      book.save()
      • 2.create:經過模型類.objects.create()保存
      User.objects.create(
            name='張三',
            age=20
        )
      • get :查詢單一結果(通常針對主鍵) 如:User.objects.get(id=10)
      • all:查詢所有 如:User.objects.all()
      • count:查詢結果數量 如:User.objects.count()
      • 條件查詢:
      • filter 過濾出多個結果 語法:User.objects.filter(屬性名稱__比較運算符=值) 如:User.objects.filter(id__exact=10) 這裏表示等於,等於時__exact能夠省略不寫
      • 比較運算符:__exact 表示等於
      • __contains表示包含 如User.objects.filter(name__contains='王') 表示查找名字包含王的
      • __startswith、__endswith:以指定值開頭或結尾 如User.objects.filter(name__startswith='張')
      • 爲空__isnull 如:User.objects.filter(name__isnull=False) 表示查詢名字不爲空的數據
      • 範圍查詢__in 如:User.objects.filter(age__in=[19,20,25]) 表示查詢年齡爲19,20,25的數據
      • 比較查詢 大於:__gt 如:User.objects.filter(age__gt=20) 表示查詢age大於20的數據
      • 大於等於:__gte
      • 小於:__lt
      • 小於等於:__lte
      • 不等於:使用exclude過濾,即將filter換成exclude 如:User.objects.exclude(id=10) 表示查詢全部id不等於10的數據
      • 日期查詢:year、month、day、week_day、hour、minute、second,對日期時間類型的屬性進行運算 如:User.objects.filter(birth__year=1990) 表示查詢birth爲1990年的全部數據
      • F對象:須要從django.db.models中導入
      • 當要比較兩個屬性時,即等號右邊也是屬性 如:User.objects.filter(age__gt=F('id')) 表示查詢age比id大的全部數據
      • 而且F對象能夠直接進行計算 如:User.objects.filter(age__gt=F('id')*2)
      • Q對象:表示條件查詢的邏輯與或非關係,Q對象用& | ~來表示與或非(sql裏的and,or,not)
      • 與關係簡寫便可 如:User.objects.filter(age__gt=20,id__gt=10) 這裏表示查詢age大於20且id大於10的全部數據
      • 或關係:應將兩個條件使用Q對象用|分隔,這裏使用到Q也須要導入 如:User.objects.filter(Q(age__gt=20) | Q(id__gt=10)) 在這裏表示查詢age大於20或者id大於10的全部數據
      • 非關係:User.objects.filter(~Q(id=10)) 表示查詢id不等於10的全部數據
      • 聚合函數:使用aggregate()過濾器調用聚合函數,聚合函數包括:Avg 平均,Count 數量,Max 最大,Min 最小,Sum 求和 注意使用這些函數時均需導入 如:User.objects.aggregate(sum(age)) 這裏會返回一個字典,鍵的格式爲age_sum,即屬性__函數名,值爲函數運算結果
      • 這裏要注意count通常不加aggregate,且只返回一個數字
      • 排序:order_by 如:User.objects.all().order_by('age') 這裏是升序,降序只須要將age前面加個減號:User.objects.all().order_by('-age')
      • 關聯查詢:一對多,要在一的一端查詢多的一端:一的一端對應的模型類對象.多的一端模型名小寫_set, 在多的一端查詢一的一端:多的一端的模型類對象.定義的關係類屬性名稱(外鍵屬性)
      • save:先查詢一個對象,再給該對象賦值修改,最後使用save保存
      user = User.objects.filter(id=10)
      user.name='王五'
      user.save()
      • update:使用模型類.objects.filter().update(),會返回受影響的行數
      User.objects.filter(id=10).update(name='王五')
      • 模型類對象.delete
      user = User.objects.get(id=10)
      user.delete
      • 模型類.objects.filter().delete() 如: User.objects.filter(id=10).delete
相關文章
相關標籤/搜索