美文网首页
Python之Django框架封装SQL实现复杂功能

Python之Django框架封装SQL实现复杂功能

作者: bob_python | 来源:发表于2017-11-13 17:37 被阅读0次

当model满足不了需求的时候(比如:存储过程、多表连接等),可以使用原生sql。

django提供了两种方法使用原生的sql:

    1、使用Manager.raw()执行原生sql,它会返回model实例

    2、直接执行原生sql,完全忽略model。警告:使用原生sql的时候,要尽可能的使用参数的形式以防止用户进行sql注入攻击。

#代码#:

def my_custom_sql():

from django.db import connection, transaction

cursor = connection.cursor()

# Data modifying operation - commit required

cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])

transaction.commit_unless_managed()

# Data retrieval operation - no commit required

cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])

row = cursor.fetchone()

return row

#对象django.db.connection代表默认的数据库连接,而django.db.transaction代表默认的数据库事务。通过调用connection.cursor()得到数据库游标对象--可以查询也可以做增删改操作。然后调用cursor.execute(sql, [params])执行sql语句,并且我们可以使用cursor.fetchone()获取一条记录,也可以使用cursor.fetchall()获取所有记录。如果执行的sql语句修改了数据库中的内容,那么可以调用transaction.commit_unless_managed()提交所作的修改,获取数据的操作则没有调用提交函数的必要。


fetchone() :

返回单个的元组,也就是一条记录(row),如果没有结果 则返回 None

fetchall() :

返回多个元组,即返回多个记录(rows),如果没有结果 则返回 ()

需要注明:在MySQL中是NULL,而在Python中则是None

用法如下所示:

fetchone()用法:

cur.execute("select host,user,password from user where user='%s'" %acc)

jilu = cur.fetchone()  ##此时 通过 jilu[0],jilu[1],jilu[2]可以依次访问host,user,password

fetchall()用法:

cur.execute("select * from user")

如果select本身取的时候有多条数据时:

cursor.fetchone():将只取最上面的第一条结果,返回单个元组如('id','title'),然后多次使用cursor.fetchone(),依次取得下一条结果,直到为空。

cursor.fetchall() :将返回所有结果,返回二维元组,如(('id','title'),('id','title')),

如果select本身取的时候只有一条数据时:

cursor.fetchone():将只返回一条结果,返回单个元组如('id','title')。

cursor.fetchall() :也将返回所有结果,返回二维元组,如(('id','title'),),

备注:其中的id和title为具体的内容

python在mysql在使用fetchall或者是fetchone时,综合起来讲,fetchall返回二维元组(元组中含有元组),fetchone只返回一维元组。

相关文章

  • Python之Django框架封装SQL实现复杂功能

    当model满足不了需求的时候(比如:存储过程、多表连接等),可以使用原生sql。 django提供了两种方法使用...

  • 使用django发送邮件

    django通过封装python的smtplib实现发送邮件功能。django 1.11官网翻译内容见:http:...

  • Django--快速入门

    Django介绍 Django是python web框架,该框架封装了WSGI接口用于创建服务器,提供了URL分发...

  • Windows下Django项目开发

    Django是python中的一个框架,可以实现web服务器的功能,从而实现前后端的数据交互功能。 安装 在 Dj...

  • Django 和 Flask 你选哪个?

    Django框架简介 用python开发的开源的web框架 现在使用最多的python web框架 功能完善、要素...

  • Django之我见

    一、什么是django? 1.什么是框架? 框架是将封装不同函数的文件放在一个容器中,实现了某些功能,提高开发效率...

  • 1. 认识Flask框架

    通过对比来了解Flask: Django: Python Web框架里比较有名当属Django,Django功能全...

  • [Android]greendao实现搜索历史功能

    使用greendao实现搜索历史功能 之前封装sqlite实现过这功能,不过原生封装使用sql语句,而且green...

  • Django中前后端之间的数据传送

    使用Django作为网页后端框架的一大好处就是可以直接在Django程序中运行python代码,使一些功能的实现变...

  • Django安装及应用-Windows

    一、前言 Django是一段时间以来最流行的基于Python的Web框架。 Django功能强大,功能强大,功能强...

网友评论

      本文标题:Python之Django框架封装SQL实现复杂功能

      本文链接:https://www.haomeiwen.com/subject/dyvzmxtx.html