Django---与数据库的交互

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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值