Python web开发----->Django(数据模型处理,数据的CRUD)
一,和数据库的交互:
1,连接到指定数据库,(先手工创建数据库)
2,定义数据模型
3,同步数据库,执行CRUD操作 (配置根管理项目中的setting.py中的 DATABASES)
ENGINE:数据库连接引擎(默认的'django.db.backends.sqlite3')把sqlite3改 为 mysql
NAME:要连接的数据库的名称
USER:连接数据库时的登录账号
PASSWORD:连接数据库时的登录密码
注意:django默认情况下,封装的是mysqldb模块连接mysql数据库
但是:mysqldb不支持新版本mysql数据库以及新版本的python环境;一般情况下我们使用pymysql替代mysqldb完成和新版本python以及mysql数据库的交互!
需要导入模块来替代MySQLdb:
import pymysql
pymsql.install_as_MySQLdb()
二,数据模型:
Django会自动管理我们创建好的数据模型——class类型
自动管理类型——数据模型——处理——继承Django内置的一个类型
django.db.models.Model_所有Django项目中数据模型的父类(我们创建好的数据模型继承父类后,Django会帮我们管理我们创建的模型)
自动管理类型中的属性——面向对象——使用Django内建函数创建属性
django.db.models.AutoField():创建一个自动增长的主键属性
django.db.models.CharField():创建了一个存储字符串的属性
django.db.models.IntegerField():创建了一个存储整数的属性
django.db.models.FloatField():创建一个存储浮点数的属性
django.db.models.TextField():创建爱你一个存储长文本的属性
django.db.models.DateTimeField():创建一个存储日期时间的属性
..
项目中的数据模型,只能定义在程序(子项目)中,不能定义在根管理项中!
三,生成SQL脚本,同步数据库!
创建好数据模型后,生成SQL脚本,同步数据库!
python mange.py makemigrations 生成SQL脚本
python manage.py migrate 同步数据库!
四,在测试命令行中,引入数据模型,对数据模型进行CRUD操作
1,进入Django测试命令行 python manage.py shell
2,引入包中的模块 from user import models (user是创建好的子程序名称)
例如:
(1)添加数据:
user = models.User(username='老王', userpass='123', age=58, gender='男', email='[email protected]', phone='13838
user.save() #保存
(2) 修改数据:
查询到对象~修改对象的数据,保存(先查询到要修改的对象之后):
>>> user.username=’老李’
>>> user.save()
(3)删除数据:
查询到对象~删除指定的对象(先查询到要删除的对象)
>>> user.delete()
(4)查询数据:
all()查询所有数据
filter()查询指定条件的数据
exclude()查询条件之外的数据
order_by()排序查询
values()查询字典形式的数据
(5) 排序:
u_list = models.User.objects.order_by(‘id’) / order_by(‘-id’)
(6)一些其他操作:
# 得到字典数据
u_dict = models.User.objects.all().values() / filter(..).values()
# 查询结果中包含多少数据
models.User.objects.all().count()
# 得到查询结果中的第一条数据
models.User.objects.all().first()
# 得到查询结果中的最后一条数据
models.User.objects.all().last()
# 判断查询结果中是否有数据
models.User.objects.all().exists()
# 模糊查询
u_list = models.User.objects.filter(username__contains=’老’)
# 开始/末尾模糊查询
u_list = models.User.objects.filter(username__startswith=’老’)
u_list = models.User.objects.filter(username__endswith=’老’)
# 范围查询
u_list = models.User.objects.filter(pk__in=[1,2,3,4,5])
# 比较查询
u_list = models.User.objects.filter(age__lte=18)
u_list = models.User.objects.filter(age__gt=18)
并且条件:与条件查询(Q对象)
models.User.objects.filter(条件1, 条件2, ..条件n)
models.User.objects.filter(Q(username=’老王’) & Q(userpass=’123’))
或者条件:或条件查询
models.User.objects.filter(Q(username=’老王’) | Q(username=’老李’))
取反:非条件查询:exclude()/->~Q
Django提供了一个对象:原始值对象:F对象
django.db.models.F
models.User.objects.filter(join_time=F(‘update_time’))
五,对应关系(级联操作):
一对一:Husband,Wife 通过外键关联【唯一约束】
一对多:Teacher, Student 通过外键关联【外键定义在多的一方】
多对多:Classes, Student 通过第三张表关联
多个类型之间的查询操作:
一对多[Teacher/Student]
通过一方查询多方:teacher.student_set.all()
通过多方查询一方:student.teacher
一对一[Husband/Wife]
互相查询:
查询husband对应的wife是谁:husband.wife
查询wife对应的husband是谁:wife.husband
多对多[Classes/Student]
查询classes课程所有的学生:classes.student_set.all()
查询studetn学生正在学习的所有课程:student.classes_set.all()