当前位置:网站首页>Django数据库增删改查
Django数据库增删改查
2022-07-26 00:36:00 【Pert-】
添加
# 表.objects.create
# 方法一
a = User.objects.create(userNum=123, name='ABB', age=18, sex='男')
# 方法二
d = dict(userNum=123, name='ABB', age=18, sex='男')
a = User.objects.create(**d)
#方法三
a = User(userNum=123, name='ABB', age=18, sex='男')
a.save()
| 参数 | 解释 |
|---|---|
| get_or_create | 只要有一个字段值与数据表中不相同(除主键),就会执行插入操作 如果完全相同则不进行插入操作,而是返回这行数据的数据对象 |
| update_or_create | 判断当前数据在数据表中是否存在,若存在则进行更新,否则为新增表数据 |
| bulk_create | 对数据进行批量操作 v1 = User(userNum=123, name=‘ABB’, age=18, sex=‘男’) v2 = User(userNum=124, name=‘ABC’, age=19, sex=‘女’) info_list = [v1,v2] User.objects.bulk_create(info_list) |
删除
# 表.objects.filter().delete()
# 方法一 删除全部内容
User.objects.all().delete()
#方法二 删除一条name为ABC的数据
User.objects.filter(name='ABC').delete()
#方法三 删除多条数据
User.objects.filter(age=18).delete()
删除过程中数据设有外键字段,就会同时删除外键关联的数据,删除模式参考models.py中设置的PROTECT、SET_NULL等
修改
# 表.objects.filter().update()
# 方法一 修改name为ABC的性别为gay
User.objects.filter(name='ABC').update(sex='gay')
# 方法二
a = dict(age='1')
User.objects.filter(name='ABC').update(**a)
# 方法三 使用F方法实现自增/自减
from djanto.db.models import F
User.objects.filter(name='ABC').update(age=F('age')+1)
查询
# select * from user 全表查询
a = User.objects.all()
# 查第一条
a[0].name
# select * from user LIMIT3 查前3条
a = User.objects.all()[:3]
# filter 也可添加多个条件
User.objects.filter(name='ABC',age=18)
# SQL中or方法 select * from user where name='ABC' or age=18 ,需要引入 Q
from django.db.models import Q
User.objects.filter(Q(name='ABC') | Q(age=18))
# SQL中not方法 select * from user where not name='ABC' ,在Q前加~
User.objects.filter(~Q(name='ABC'))
# 统计数量
User.objects.filter(name='ABC').count()
# 去重 select DISTINCT name from user where name='ABC' ,distinct无需设置参数,去重方式根据values
a = User.objects.values('name').filter(name='ABC').distinct()
# 降序排序查询,降序在order_by里设置 '-'
User.objects.order_by('-age')
| 匹配符 | 使用 | 说明 |
|---|---|---|
| __exact | filter(name__exact=‘ABC’) | 完全等于 |
| __iexact | filter(name__iexact =‘ABC’) | 完全等于并忽略大小写 |
| __contains | filter(name__contains =‘ABC’) | 模糊匹配,类似SQL中like %ABC% |
| __icontains | filter(name__icontains =‘ABC’) | 模糊匹配并忽略大小写 |
| __gt | filter(name__gt =1) | 大于 |
| __gte | filter(name__gte =1) | 大于等于 |
| __lt | filter(name__lt=1) | 小于 |
| __lte | filter(name__lte=1) | 小于等于 |
| __isnull | filter(name__isnull=True/False) | 判断是否为空 |
关联表外键参数on_delete
(1)、on_delete = None:
删除关联表的数据时,当前表与关联表的filed的行为。
(2)、on_delete = models.CASCADE:
表示级联删除,当关联表(子表)中的数据删除时,与其相对应的外键(父表)中的数据也删除。
(3)、on_delete = models.DO_NOTHING:
你删你的,父亲(外键)不想管你
(4)、on_delete = models.PROTECT:
保护模式,如采用这个方法,在删除关联数据时会抛出ProtectError错误
(5)、on_delete = models.SET_DEFAULT:
设置默认值,删除子表字段时,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。
(6)、on_delete = models.SET(值):
删除关联数据时,自定义一个值,该值只能是对应指定的实体
数据库字段
字符串
password=models.CharField(verbose_name='密码:',max_length=50)设置主键
account=models.CharField(verbose_name='账号:',max_length=50,primary_key=True,db_index=True) db_index:添加索引设置关联外键
account=models.ForeignKey(User_Account,on_delete = models.CASCADE)整型
group_id=models.IntegerField(verbose_name='群聊编号')布尔类型
models.BooleanField(verbose_name='是否可以增加文件',default=False)单选
#sex choices 设置单选,元组前面的值为真是存储值,后面的值为展示值sex=models.CharField(max_length=1,choices=[('男','男'),('女','女')])时间
DateTimeField(DateField)x 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] models.DateField(verbose_name='token更新时间',auto_now=True) 日期格式 YYYY-MM-DD auto_now:每次修改都会自动更新 auto_now_add:数据创建时值为添加时的时间,后续其他字段数据修改不会变 TimeField(DateTimeCheckMixin, Field) 时间格式 HH:MM[:ss[.uuuuuu]]
清空数据库,重新建表
想要删除自己之前练习的数据库模型
Order.objects.all().values().delete()删除文件
- 删除数据库内所有的表
- 删除migrations文件夹中的所有 文件,除了
__init__.py文件 - 运行
python manage.py makemigrations python manage.py migrate
django 解决manage.py migrate无效的问题
解决方案
python manage.py dbshell 进到数据库中,执行delete from django_migrations where app='your_appname'; python manage.py makemigrations(若migrations文件未删除,可不执行这一步) python manage.py migrate 好啦,大功告成原因
造成多次应用migrations失败的原因是,当前model是修改过的,原来的migrations已经被我删除,但是,重新生成的migrations使用递增整数记名,所以,在django_migrations表中0001,0002等前面几个数字的文件都已被记录,在Django看来,被记录了就相当于已应用,所以,会出现刚开始的No migrations to apply.
边栏推荐
- Mwec: a new Chinese word discovery method based on multi semantic word vector
- LCA 三种姿势(倍增,Tarjan+并查集,树链剖分)
- JMeter/IDEA中引用jar包json-path.jar的坎坷之路
- Research on text classification of e-commerce comments based on mffmb
- 本地电脑架设传奇怎么开外网叫朋友一起玩?
- Semaphore
- Force deduction record: Sword finger offer (2) -- jz13-22
- 快速入门顺序表链表
- Rotate K strings to the left (details)
- Hcip day 11
猜你喜欢

Getting started with D3D calculation shaders

Hnoi2012 mine construction

How to open the Internet and ask friends to play together?

The way to understand JS: six common inheritance methods of JS

Hcip day 13
![[untitled] how to realize pluggable configuration?](/img/48/673a2d63e11679f1e75ca3ca7ed6a9.jpg)
[untitled] how to realize pluggable configuration?

使用 SAP UI5 FileUploader 控件上传本地文件试读版

从另一个角度告诉你单元测试的意义

With data-driven management transformation, the first year of science and technology was at the right time

开发还没联调,任务就要上线
随机推荐
Getting started with D3D calculation shaders
Modeling and simulation analysis of online medical crowdfunding communication based on SEIR model
Tell you the meaning of unit testing from another angle
参数解析器HandlerMethodArgumentResolver分析与实战
HOOPS Exchange助力混合计算流体动力学软件搭建3D格式导入读取功能 | 客户案例
聊聊研发团队中的“人”
开放下载!《阿里巴巴 DevOps 实践手册》
Tarjan finds the strongly connected component o (n+m), shrinking point
使用CMake编译OpenFoam求解器
Azure Synapse Analytics 性能优化指南(1)——使用有序聚集列存储索引优化性能
[plaything determination scratch children programming] ride a small motorcycle (dynamic background + camera control operation)
Database tools duel: heidisql and Navicat
Leetcode 笔记 121. 买卖股票的最佳时机
Hoops exchange helps hybrid computational fluid dynamics software build 3D format import and read function | customer case
Are you still counting the time complexity?
Analysis and practice of parameter parser handlermethodargumentresolver
2022/7/19 exam summary
Research on visualization method of technology topic map based on clustering information
Flask send verification code logic
SQL (basic 2)