Django學習之二(orm和Ajax)

1. orm簡介css

 

 

 

2. Django使用mysql數據庫的步驟:python

1. 在mysql裏建立數據庫mysql

```sql
create database 數據庫名稱 default charset=utf8;
```jquery

2. 在setting裏配置git

  DATABASES = {
      'default': {
      'ENGINE': 'django.db.backends.mysql', # 指定爲MySQL引擎
      'NAME': 'l18', # 指定數據庫的名稱
      'HOST': 'localhost', # IP地址
      'PORT': 3306, # 端口
      'USER': 'root', # 用戶名
      'PASSWORD': '123', # 密碼
  }
  }ajax

3. 在setting同級目錄下的init.py裏配置sql

    import pymysql
    pymysql.install_as_MySQLdb()

數據庫

4. 在APP下的models.py文件裏建立模型類django

  class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=5, decimal_places=2) # 最大值999.99
    publisher = models.CharField(max_length=32) # 出版社名稱
    pub_date = models.DateField() # 出版時間

api

5. 執行數據庫遷移命令

    python3 manage.py makemigrations # 把models.py的變動記錄記錄下來
    python3 manage.py migrate # 把變動記錄的操做同步到數據庫中

  報錯:

    1. 報錯一:

    File "/home/moluo/.local/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 36, in <module>
    raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
    django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

    解決方法:   註釋掉36和37行代碼便可.

    2. 報錯二:

    File "/home/moluo/.local/lib/python3.6/site-packages/django/db/backends/mysql/operations.py", line 146, in last_executed_query
    query = query.decode(errors='replace')
    AttributeError: 'str' object has no attribute 'decode'

    解決方法:  146行加上以下代碼:
    query = query.encode()

6. 單表數據的相關操做

  1. 新增

    方式一:
    直接實例化對象,注意必定要save
    方式二:
    經過objects提供的create方法建立

  2. 修改

    方式一:
    獲取對象,修改對象的屬性,最後save

    方式二:
    直接使用update方法便可(支持批量修改)

  3. 刪除

    方式一:
    獲取對象,調用delete方法
    方式二:
    filter以後,直接delete方法(支持批量刪除)

  4. 查詢

    1. 查詢api

      all 獲取全部 QuerySet
      filter 過濾 QuerySet
      first 第一條 對象
      get 獲取單條對象 對象
      values QuerySet 裏面是字典
      values_list QuerySet 裏面是元組

    2. 基於雙下劃線的模糊查詢

      Book.objects.filter(price__in=[100,200,300]) # 在...裏面
      Book.objects.filter(price__gt=100) # 大於 gte 大於等於
      Book.objects.filter(price__lt=100) # 小於 lte
      Book.objects.filter(price__range=[100,200]) # 範圍
      Book.objects.filter(title__contains="法") # 包含
      Book.objects.filter(title__icontains="python") # 不區分大小寫
      Book.objects.filter(title__startswith="九") # 以...開頭
      Book.objects.filter(pub_date__year=2018) # 年份=...

7. 多表操做

  1. 查詢操做

  

 

#基於對象的跨表查詢
# """
# 正向:按字段
# ----------->
# book publish
# <-----------
# 反向:小寫表名 +_set(一對一時不須要加_set)
# """

  2. Q對象

    python   JavaScript   orm的Q對象
    and       &&         &          與
    or       ||         |           或
    not       !         ~          非

  例子:

 

 

8. ajax的基本格式:

    $.ajax({
    url: "",    // 提交的地址url
    type: "",    // 請求方式
    success: function(){    // 回調函數
    pass
      }
    })

  1.在templates文件下的js文件夾添加一個js.jquery文件,把query.js放在文件下,地址:http://cdn.bootcss.com/jquery/3.3.1/jquery.js,或者 :http://cdn.bootcss.com/jquery/3.3.1/jquery.min.js

  


9.使用splite3數據庫心得

  a.下載splite

 

 b.數據庫配置:

 

 c.在models中建立數據庫表名和字段

 

 d.在控制檯執行遷移命令:

python3 manage.py makemigrations

python3 manage.py migrate

e.在python console中執行添加表數據,必定要先添加無外鍵的數據,添加完了再次添加有外鍵的數據----------重點

 

 f.添加數據的例子:

  dep表,無外鍵

    models.Dep.objects.create(title="銷售部")
    models.Dep.objects.create(title="關公部")

  emps表,有外鍵(dep_id)

    models.Emps.objects.create(name="令狐沖", age=24, salary=6000, dep_id=1, province="河南")
    models.Emps.objects.create(name="任盈盈", age=18, salary=8000, dep_id=2, province="廣東")
    models.Emps.objects.create(name="任我行", age=56, salary=10000, dep_id=1, province="廣東")
    models.Emps.objects.create(name="嶽靈珊", age=19, salary=6000, dep_id=2, province="河南")
    models.Emps.objects.create(name="小龍女", age=20, salary=8000, dep_id=2, province="河北")

g.添加完畢後,寫查詢代碼,啓動程序

 

 h.多對多添加數據的例子:

book = models.Book.objects.filter(title="葵花寶典").first()ling = models.Author.objects.filter(name='令狐沖').first()xing = models.Author.objects.filter(name='任我行').first()ying = models.Author.objects.filter(name='任盈盈').first()book.authors.add(ling.pk, xing.pk, ying.pk)

相關文章
相關標籤/搜索