Django部分面试技术问题 part1

  1. django的orm中如何查询id不等于5的元素?
    Student.objects.filter().excute(id=5)//查询id不等于5的元素

  2. 使用Django中modelfilter条件过滤方法,把下边sql语句转化成python代码select*fromcompanywheretitle
    like"%abc%"ormecount>999orderbycreatetimedesc;
    #第一种 sorted(models.Company.objects.filter(num__gt=20)|models.Company.objects.filter(name__c ontains='小'),key=lambdax:x.time,reverse=False)

    #第二种 from django.db.models import Q models.Company.objects.filter(Q(num__gt=20)|Q(name__contains='小')).order_by('-time')

  3. 如何给djangoCBV的函数设置添加装饰器?
    from django.utils.decorators import method_decorator

    ①给方法加:
    @method_decorator(check_login) defpost(self,request):

    ②给dispatch加:
    @method_decorator(check_login) defdispatch(self,request,*args,**kwargs): ...
    ③给类加:
    @method_decorator(check_login,name="get") @method_decorator(check_login,name="post") classHomeView(View): ...

  4. django如何连接多个数据库并实现读写分离?
    1.手动
    model.object.using(‘指定数据库’).all()
    2.自动
    创建一个py文件,创建一个类,实现以下两个方法,函数名固定写法
    classRouter:
    defdb_for_read():
    #读操作
    return'slave'
    defdb_for_write():
    #写操作
    return'default'

  5. django中的F的作用?
    操作数据表中的某列值
    例(单个更新):
    普通方式
    例(多个更新):
    reporter=Reporters.objects.get(name='Tintin')
    reporter.stories_filed+=1#放到内存中,使用python计算,然后通过save方法保存
    reporter.save()
    使用F表达式(简单使用)
    from django.db.models import F
    reporter=Reporters.objects.get(name='Tintin')
    reporter.stories_filed=F('stories_filed')+1
    reporter.save()
    虽然看上去和上面的内存Python操作相似,但事实上这是一个描述数据库操作的sql概念
    当django遇到F()实例,它覆盖了标准的Python运算符创建一个封装的SQL表达式。在这个例子中,
    reporter.stories_filed就代表了一个指示数据库对该字段进行增量的命令。
    无论reporter.stories_filed的值是或曾是什么,Python一无所知–这完全是由数据库去处理的。所有的
    Python,通过Django的F()类,只是去创建SQL语法参考字段和描述操作
    Reporter.objects.all().update(stories_filed=F('stories_filed')+1)

  6. django中的Q的作用?
    对对象进行复杂查询,并支持&(and)|(or)|(not)操作符
    例:
    from django.db.models import Q
    from login.models import New #models对象

    news=New.objects.filter(Q(question__startswith='What')) #例1

    news=New.objects.filter(Q(question__startswith='Who')| Q(question__startswith='What')) #例2

    news=New.objects.filter(Q(question__startswith='Who')|~Q(pub_date__year=2005)) #例3 ~表示取反

    news=Poll.objects.get(Q(question__startswith='Who'),Q(pub_date=date(2005,5,2))| Q(pub_date=date(2005,5,6))) #例4

  7. django中如何执行原生SQL?
    ①使用execute执行自定义的SQL
    直接执行SQL语句(类似于pymysql的用法)
    #更高灵活度的方式执行原生SQL语句 fromdjango.dbimportconnection cursor=connection.cursor() cursor.execute("SELECTDATE_FORMAT(create_time,'%Y-%m')FROMblog_article;")
    ret=cursor.fetchall()
    print(ret)
    ②使用extra方法:queryset.extra(select={"key":"原生的SQL语句"})
    ③使用raw方法
    1.执行原始sql并返回模型
    2.依赖model多用于查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值