1.和数据交互的操作步骤
(1)连接到指定的数据库
(2)定义数据模型
(3)同步数据库,执行CRUD操作
2.连接到指定数据库
(1)创建数据库
create database bogo;
(2)创建Django项目
django-admin startproject bogo
(3)修改配置连接数据库
在根管理目录下的setting.py中
DATABASES = {
'default':{
'ENGING':'django.db.backends.mysql', # 连接的数据库类型
'NAME':'bogo', # 连接的数据库名称
'USER':'root', # 连接的用户名
'PASSWORD':'root', # 连接的密码
'HOST': '127.0.0.1', # 连接的主机
'PORT': 3306, # 连接的端口
}
}
注意:Django默认情况下,封装的是mysqldb模块连接mysql数据库,但是,mysqldb不支持新版本的mysql数据库以及新版本的python环境.一般情况下我们使用pymysql代替mysqldb完成和新版本python以及mysql数据库的交互!
import pymysql
pymysql.install_as_MySQLdb()
生成指定的数据库的sql脚本
python manage.py makemigrathons
同步数据库
python manage.py migrate
3.定义数据模型
django会自动管理我们创建好的数据模型—class类型
自动管理类型–数据模型–处理–继承Django内置的一个类型
django.db.models.Model # 所有Django项目中数据模型的父类
自动管理类型中的属性–面向对象–使用Django内建函数创建属性
django.db.models.AutoField() # 创建一个自动增长的主键属性
django.db.models.CharField() # 创建一个存储字符串的属性
django.db.models.InterField() # 创建一个存储整数的属性
...
对象中的属性类型定义 | 表中的字段属性 |
---|---|
AutoField() | auto_increment 自动增长 |
BooleanField() | bool 布尔类型 |
NullBooleanField() | bool or null 扩展布尔类型 |
CharField() | varchar 字符串 |
TextField() | text 长文本 |
InterField() | int 整数 |
DecimalField() | double 高精度浮点数 |
FloatField() | float 单精度浮点数 |
DateField() | date 日期 |
TimeField() | time 时间 |
DateTimeField() | datatime 日期时间 |
FileField() | blob 二进制 |
项目中的数据模型,只能定义在程序(子项目)中,不能定义在根管理项中!
4.数据库操作
(1)新增
from user import models
user = models.User(username='老王', age=20)
user.save()
(2)查看
# 查询对象,得到对象所属类型的objects属性
u = models.User.objects
# 查询所有用户的数据:得到一个类似列表的对象:QuerySet
user_list = u.all()
for user in user_list:
print(user.username)
# 查询除这个之外的数据
l2 = u.exclude(id=1)
# 排序
u.order_by('id')
# 倒序
u.order_by('-id')
# 用字典方式表示
u.value()
u.filter(pk=2).value()
# 查询结果中包含多少数据
models.User.objects.all().count()
# 得到查询结果中的第一条数据
models.User.objects.all().first()
# 得到查询结果中的最后一条数据
models.User.objects.all().last()
# 判断查询结果中是否有数据
models.User.objects.all().exists()
# 查询一条数据 登录
user = models.User.objects.get(username='老王', userpass='admin')
# 等值条件查询
u = models.User.objects.filter(username='老王')
# 模糊查询
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])
# 比较查询
u_list = models.User.objects.filter(age__lte=18) # age<=18
u_list = models.User.objects.filter(age__gte=18) # age>=18
(3)修改(查询对象–>修改数据–>保存数据)
# 查询数据
u = models.User.objects.get(username='老王')
# 修改数据
u.userpass = 'admin'
# 保存数据
u.save()
(4)删除()查询对象–>删除对象)
# 查询对象
u = models.User.objects.get(pk=1)
# 删除对象
u.delete()