Django学习之二(orm和Ajax)

1. orm简介

 

 

 

2. Django使用mysql数据库的步骤:

1. 在mysql里创建数据库

```sql
create database 数据库名称 default charset=utf8;
```

2. 在setting里配置

  DATABASES = {
      'default': {
      'ENGINE': 'django.db.backends.mysql', # 指定为MySQL引擎
      'NAME': 'l18', # 指定数据库的名称
      'HOST': 'localhost', # IP地址
      'PORT': 3306, # 端口
      'USER': 'root', # 用户名
      'PASSWORD': '123', # 密码
  }
  }

3. 在setting同级目录下的init.py里配置

    import pymysql
    pymysql.install_as_MySQLdb()

4. 在APP下的models.py文件里创建模型类

  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() # 出版时间

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)

posted @ 2019-11-22 20:51  vivianping  阅读(181)  评论(0编辑  收藏  举报