当前位置:网站首页>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.
边栏推荐
- Multithreading concurrent parallel threaded process
- [ybtoj advanced training guidance] class roll call [string hash]
- Thread lifecycle
- Function sub file writing
- PyGame game: "Changsha version" millionaire started, dare you ask? (multiple game source codes attached)
- Looking at jBPM from jbm3 to jbm5 and activiti
- Global exception handlers and unified return results
- 我大抵是卷上瘾了,横竖睡不着!竟让一个Bug,搞我两次!
- 老板叫我写个APP自动化--Yaml文件读取--内附整个框架源码
- 1181: integer parity sort
猜你喜欢
随机推荐
Inventory of excellent note taking software: good-looking and powerful visual note taking software, knowledge map tools heptabase, hydrogen map, walling, reflect, infranodus, tiddlywiki
在OpenCloudOS使用snap安装.NET 6
On the influence of small program on the digitalization of media industry
How to reduce the risk of project communication?
PMP needs to master its own learning methods
File operations in QT
Key summary IV of PMP examination - planning process group (2)
栈的弹出压入序列<难度系数>
R语言使用car包中的avPlots函数创建变量添加图(Added-variable plots)、在图像交互中,在变量添加图中手动标识(添加)对于每一个预测变量影响较大的强影响点
自定义异常类及练习
Xiaomi's payment company was fined 120000 yuan, involving the illegal opening of payment accounts, etc.: Lei Jun is the legal representative, and the products include MIUI wallet app
Caffeine cache, the king of cache, has stronger performance than guava
Abnormal occurrence and solution
2020-10-27
Proxy mode (proxy)
小米旗下支付公司被罚 12 万,涉违规开立支付账户等:雷军为法定代表人,产品包括 MIUI 钱包 App
PMP考试重点总结八——监控过程组(2)
布隆过滤器 课程研究报告
理想中的接口自动化项目
标识符的命名规则和规范