django mysql搜索_Django--数据库查询操作

F查询和Q查询:

F查询:

Django中提供f()来进行两个值之间的比较,F()可以在查询中引用字段来,来比较同一个model实例中的两个不同的字段

示例1:查询卖出数量大于库存数量的商品

from django.db.models importF

ret1=models.Product.objects.filter(maichu__gt=F('kucun'))print(ret1)

F可以用来帮我们取到表中某个字段对应的值来当作我们的筛选条件,而不是我认为自定义的常量了,实现了动态比较的效果

Django支持F对象和F对象之间的加减乘除的取模的操作。基于此可以子啊表中的数值类型进行数学运算

将每个商品的价格提高50块

models.Product.objects.update(price=F('price')+50)

如果修改char字段,在后面加上新的字符,这个时候是需要使用Concat操作,并且要和凭借值Value一起使用。

Q查询:

filter()等方法中使用逗号隔开的条件的与的关系。如果这时候你需要执行更复杂的查询(or...),那么就可以使用Q对象了

示例1:查询卖出数量大于100或者价格少于100块的商品:

from django.db.models importQ

models.Product.objects.filter(Q(maichu__gt=100)|Q(price__lt=100))

对条件包裹一层Q的时候,filter就可以支持交叉与或并的比较符

示例二:查询库存数是100并且卖出数量不是0的产品

models.Product.objects.filter(Q(kucun=100)&~Q(maichu=0))

我们可以组合使用&和|操作符以及使用括号进行分组来编写任意复杂的Q对象,同时Q对象可以使用~操作符进行取反, 这允许组合正常的查询和取反(NOT)查询

示例三:查询产品名包含新款,并且库存数大于60的

models.Product.objects.filter(Q(kucun__gt=60), name__contains="新款")

查询函数可以混合使用Q对象和关键字参数。所有提供给查询函数的参数(关键字参数或Q对象)都将

“AND”在一起。但是如果出现Q对象,它必须位于所有关键字参数的前面

Q对象的补充:

from django.db.models importF, Q

q=Q()

q.connector= 'or' #通过这个参数可以将Q对象默认的and关系变成or

q.children.append(('price', 188.88))

q.children.append(('name', '高跟鞋'))

res=models.Product.objects.filter(q)print(res)

事务操作:

事务的ACID:

原子性、一致性、隔离性、持久性

定义:将多个sql语句操作变成原子性操作,要么同时成功,有一个失败则在里面回滚都原来的状态,保证数据的完整性和一致性(NoSQL数据库对于事务则是部分支持)

from django.db importtransaction

with transaction.atomic():#在with代码块中写事务操作

models.Product.objects.filter(id=1).update(F('kucun') - 1, F('maichu') + 1)

自定义orm的字段:

classMyCharField(models.Field):def __init__(self, max_length, *args, **kwargs):

self.max_length=max_length

super().__init__(max_length=max_length, *args, **kwargs)defdb_type(self, connection):return 'char(%s)' %self.max_lengthclassProduct(models.Model):

info= MyCharField(max_lengh=32)

only和defer:拿到的是一个对象,两者之间是相反的

res = models.Product.object.defer("name")for i inres:print(i.name)

res= models.Product.object.only("name")for i inres:print(i.name)

1、常用字段

AutoField:

int自增列,必须填入参数primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列

IntegerField:

一个整数类型,范围在 -2147483648 to 2147483647。(一般不用它来存手机号(位数也不够),直接用字符串存,)

CharField:

字符类型,必须提供max_length参数, max_length表示字符长度。

Django中的CharField对应的MySQL数据库中的varchar类型,没有设置对应char类型的字段,但是Django允许我们定义新的字段,在上面已经定义了。

update和save之间的区别:

两者都是对数据的修改和保存的操作,但是save函数是将数据列的全部数据项全部重新写了一遍,而update则是针对修改项进行针对的跟新,效率高而且耗时更少。所以以后要是有对数据的修改更推荐使用uodate()

choices:

choices = ((1, '男'), (2,'女'),(3,'其他'))

gender= models.IntegerField(choices=choices, default=2)

res= models.Product.objects.filter(id=1).first()print(res.get_gender_display()) #可以直接查到指定数据中的性别关键字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于你的问题,我可以回答。以下是关于MySQL Django架构图和Django项目架构介绍的内容。 MySQL Django架构图: MySQL是一种开源的关系型数据库管理系统,在Django框架中,我们可以通过使用MySQL数据库来存储和管理数据。下面是一个简单的MySQL Django架构图: ``` +----------------------+ | | | Django | | | +----------+-----------+ | | | +---------v----------+ | | | MySQL | | | +--------------------+ ``` 如上图所示,Django应用程序通过使用MySQL数据库来存储和管理数据,其中Django提供了ORM(对象关系映射)来处理数据的操作。ORM允许我们在Django中使用Python对象来代替SQL语句来操作数据库Django项目架构介绍: Django是一个MVC(Model-View-Controller)架构的Web框架,它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。下面是一个简单的Django项目架构图: ``` +----------------------+ | | | Controller | | | +----------+-----------+ | | | +---------v----------+ | | | View | | | +---------+----------+ | | | +---------v----------+ | | | Model | | | +--------------------+ ``` 如上图所示,Django应用程序包含三种主要组件: 1. 模型(Model):模型是应用程序中用于管理数据的组件。它定义了应用程序中使用的数据结构,并提供了用于读取、创建、更新和删除数据的方法。 2. 视图(View):视图是应用程序中用于呈现用户界面的组件。它定义了用户将看到的页面,并提供了与模型交互的方法。 3. 控制器(Controller):控制器是应用程序中用于管理用户请求的组件。它接收来自用户的请求,并确定哪个视图将呈现给用户。 以上是对MySQL Django架构图和Django项目架构的简单介绍。希望能对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值