Django中则怎么使用原生sql查询数据库?

在Django中,自带的ORM已经可以满足我们的大部分需求了. 但在数据量比较大的的时候, 考虑到查询效率,以及用户体验等问题,我们就不得不考虑使用SQL语句查询数据库了(本人就是遇到了这样的问题)

废话不多说, 直接开始!!!

首先定义一张表

from datetime import datetime
from django.db import models


class PostModel(models.Model):
    postid = models.IntegerField(unique=True, help_text="岗位id")
    create_by = models.CharField(max_length=50, blank=True, null=True, help_text="创建人")
    create_time = models.DateField(auto_now_add=datetime.now, help_text="创建时间")
    status = models.SmallIntegerField(default=0, help_text="状态 0:启用, 1:删除")
    level = models.SmallIntegerField(default=0, help_text="等级0,1,2,")
    class Meta:
        db_table = "post"

    def __str__(self):
        return self.name

在django中使用SQL查询, 这里有两种方法.

第一种: 使用raw()方法

# raws 是一个QuerySet
raws = PostModel.objects.raw(" select * from post limit 0, 10 ") 

# 获取第一条数据的id
id = raws[0].id

# 也可以序列化后在获取id
raws = raws.values()
id = raws[0]["id"]

    使用raw()方法, 可以自己定义SQL语句, 在这里需要注意,查询字段中必须含有主键, 这里我们用, 到了PostModel, model中的一些数据处理方法在这里也是适用的

        

第二种:使用conection方法连接数据库查询

from django.http import HttpRequest, HttpResponse
from django.db import connection


def my_post(request:HttpRequest)->HttpResponse:
    with connection.cursor() as cursor:
        cursor.execute("select * from post ")
        sql_data = cursor.fetchall()    # 获取一条数据, 使用fetchone()
        colums = [col[0] for col in cursor.description]
        sql_data = [dict(zip(colums, row)) for row in sql_data]

    return HttpResponse(json.dumps(sql_data))


  注意: 这里面我们使用了原生的SQL查询方法,那么这里就必须考虑一个问题,就是sql注入的问题,在下一篇我会写一下这方面一些见解.

感谢各位的阅读!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值