1. 程式人生 > 其它 >Django之模型層

Django之模型層

模型層

測試環境的搭建

"""
當你只是想測試django中的某一個py檔案內容 那麼你可以不用書寫前後端互動的形式
而是直接寫一個測試指令碼即可

指令碼程式碼無論是寫在應用下的tests.py還是自己單獨開設py檔案都可以
"""
# 測試環境的準備 去manage.py中拷貝前四行程式碼 然後自己寫兩行
import os

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day64.settings")
    import django
    django.setup()
    # 在這個程式碼塊的下面就可以測試django裡面的單個py檔案了

表的查詢

  # 1.all()  查詢所有資料
    # 2.filter()     帶有過濾條件的查詢
    # 3.get()        直接拿資料物件 但是條件不存在直接報錯
    # 4.first()      拿queryset裡面第一個元素
    # res = models.User.objects.all().first()
    # print(res)
    # 5.last()
    # res = models.User.objects.all().last()
    # print(res)

    # 6.values()  可以指定獲取的資料欄位  select name,age from ...     列表套字典
# res = models.User.objects.values('name','age') # <QuerySet [{'name': 'jason', 'age': 18}, {'name': 'egonPPP', 'age': 84}]> # print(res) # 7.values_list() 列表套元祖 # res = models.User.objects.values_list('name','age') # <QuerySet [('jason', 18), ('egonPPP', 84)]> # print(res)
# 8.distinct() 去重 # res = models.User.objects.values('name','age').distinct() # print(res) """ 去重一定要是一模一樣的資料 如果帶有主鍵那麼肯定不一樣 你在往後的查詢中一定不要忽略主鍵 """ # 9.order_by() # res = models.User.objects.order_by('age') # 預設升序 # res = models.User.objects.order_by('-age') # 降序 # # print(res) # 10.reverse() 反轉的前提是 資料已經排過序了 order_by() # res = models.User.objects.all() # res1 = models.User.objects.order_by('age').reverse() # print(res,res1) # 11.count() 統計當前資料的個數 # res = models.User.objects.count() # print(res) # 12.exclude() 排除在外 # res = models.User.objects.exclude(name='jason') # print(res) # 13.exists() 基本用不到因為資料本身就自帶布林值 返回的是布林值 # res = models.User.objects.filter(pk=10).exists() # print(res)

django終端列印sql語句

  

# 方式一

  res = models.User.objects.values_list('name','age') # <QuerySet [('jason', 18), ('egonPPP', 84)]>
  print(res.query)
  queryset物件才能夠點選query檢視內部的sql語句


# 方式二 在配置檔案中加入以下配置
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } }

基於雙下劃線的模糊查詢

# 神奇的雙下劃線查詢
    # 1 年齡大於35歲的資料
    # res = models.User.objects.filter(age__gt=35)
    # print(res)
    # 2 年齡小於35歲的資料
    # res = models.User.objects.filter(age__lt=35)
    # print(res)
    # 大於等於 小於等於
    # res = models.User.objects.filter(age__gte=32)
    # print(res)
    # res = models.User.objects.filter(age__lte=32)
    # print(res)

    # 年齡是18 或者 32 或者40
    # res = models.User.objects.filter(age__in=[18,32,40])
    # print(res)

    # 年齡在18到40歲之間的  首尾都要
    # res = models.User.objects.filter(age__range=[18,40])
    # print(res)

    # 查詢出名字裡面含有s的資料  模糊查詢
    # res = models.User.objects.filter(name__contains='s')
    # print(res)
    #
    # 是否區分大小寫  查詢出名字裡面含有p的資料  區分大小寫
    # res = models.User.objects.filter(name__contains='p')
    # print(res)
    # 忽略大小寫
    # res = models.User.objects.filter(name__icontains='p')
    # print(res)

    # res = models.User.objects.filter(name__startswith='j')
    # res1 = models.User.objects.filter(name__endswith='j')
    #
    # print(res,res1)


    # 查詢出注冊時間是 2020 1月
    # res = models.User.objects.filter(register_time__month='1')
    # res = models.User.objects.filter(register_time__year='2020')