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)