标签:事物 逗号 python 意思 tom 并且 过滤 from 代码
F查询:
之前构造的过滤器都是将字段值与某个我们设定的常亮做比较,如果我们要对两个字段的字段的值做比较久需要用到F查询;F查询可以用来比较同一个model事例中两个不同字段的值,
准备工作:
创建数据库,使用orm创建表,使用Navicat添加数据,也可以使用pycharm中的database功能连接mysql添加数据

from django.test import TestCase
# Create your tests here.
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test01.settings")
import django
django.setup()
from app01 import models
# 查询卖出数大于50的商品
# res = models.Product.objects.filter(maichu__gt=50)
# print(res)
# 查询卖出数大于库存数的商品,F查询
from django.db.models import F,Q
res=models.Product.objects.filter(maichu__gt=F(‘kucun‘))
print(res)

# 将所有商品的价格提高100块
res = models.Product.objects.update(price=F(‘price‘)+100)
print(res)

#将所有的商品的名字后面都加一个爆款
from django.db.models.functions import Concat
from django.db.models import Value
res=models.Product.objects.update(name=Concat(F(‘name‘),Value(‘爆款‘)))
print(res)

Q查询:
filter() 方法中传入多个值用逗号分开表示的意思的并且的关系,如果需要用到或条件的时候可以用Q查询
#查询卖出数大于300或者价格小于100块的商品
res=models.Product.objects.filter(Q(maichu__gt=300)|Q(price__lt=100))
print(res)

Q查询也可以当做并且条件使用:
res =models.Product.objects.filter(Q(name=‘衣服爆款‘),Q(maichu=1001))
print(res)
# 名字和卖出条件都满足的数据为空,查询出的结果为空

res =models.Product.objects.filter(Q(name=‘衣服爆款‘),Q(maichu=1000))
print(res)
#名字和卖出都满足的的情况下有数据输出

‘~’:相反意思
# 价格是100不是衣服爆款的商品
res =models.Product.objects.filter(Q(price=100.00)|~Q(name=‘衣服爆款‘))
print(res)


事物
原子性
一致性
隔离性
持久性
开启事务:

#开启事物
from django.db import transaction
with transaction.atomic(): #事物要么全部成功,要么全部失败
# with代码块中写入书屋操作
models.Product.objects.filter(id=1).update(kucun=F(‘kucun‘)-1)
models.Product.objects.filter(id=1).update(maichu=F(‘maichu‘)+1)
print(‘操作完成‘)

事物执行成功
查看sql数据是否被修改了

在原有的表格字段上添加新的字段

迁移数据,把新增的字段写入的数据库中
python3 manage.py makemigrations
python3 manage.py migrate
查看数据库中新增字段是否添加上:

数据库中限制存数据的值

执行命令:
python3 manage.py makemigrations
python3 manage.py migrate
查看数据库是否创建完成:

查询数据:
只能查询到数据库中的值,但是查询不到写入的对应的值

通过get_字段名__display()来获取设置的值

标签:事物 逗号 python 意思 tom 并且 过滤 from 代码
原文地址:https://www.cnblogs.com/yangzhaon/p/11018938.html