当前位置:网站首页>Django数据库操作以及问题解决
Django数据库操作以及问题解决
2022-06-28 09:39: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.
边栏推荐
- dotnet 使用 Crossgen2 对 DLL 进行 ReadyToRun 提升启动性能
- 为什么 Istio 要使用 SPIRE 做身份认证?
- HDI blind hole design, have you noticed this detail?
- PMP考试重点总结五——执行过程组
- 虛擬機14安裝win7(圖教程)
- 线程和进程
- 在OpenCloudOS使用snap安装.NET 6
- Comprehensive evaluation of outline note taking software workflow: advantages, disadvantages and evaluation
- 函数的分文件编写
- 数字人行业爆发在即,市场格局几何?
猜你喜欢

Write a simple timeline

Key summary V of PMP examination - execution process group

Dbeaver连接人大金仓KingbaseES V8(超详细图文教程)

为什么 Istio 要使用 SPIRE 做身份认证?

File operations in QT

Bridge mode
![1180: fractional line delimitation /p1068 [noip2009 popularization group] fractional line delimitation](/img/1a/162b060a6498e58278b6ca50e4953c.png)
1180: fractional line delimitation /p1068 [noip2009 popularization group] fractional line delimitation

Dbeaver connects to kingbasees V8 (ultra detailed graphic tutorial)

虚拟机14安装win7(图教程)

线程的生命周期
随机推荐
为什么 Istio 要使用 SPIRE 做身份认证?
Custom exception classes and exercises
Looking at jBPM from jbm3 to jbm5 and activiti
数字人行业爆发在即,市场格局几何?
[ybtoj advanced training guide] maximum separation [hash] [Floyd]
==And eqauls()
P2394 yyy loves Chemistry I
abnormal
Sword finger offer | Fibonacci sequence
Redis sentinel cluster main database failure data recovery ideas # yyds dry goods inventory #
Bridge mode
Settings of gift giving module and other custom controls in one-to-one video chat system code
虛擬機14安裝win7(圖教程)
JVM系列(2)——垃圾回收
什么是在线开户?现在网上开户安全么?
Edit the live broadcast source code with me. How to write the live broadcast app code
异常处理4种方法
Wechat applet development log
A strange execution plan. One table in the association query is not associated with any other tables
浅谈小程序对传媒行业数字化的影响