Simple Life

和这个世界交手这许多年   你是否光彩依旧,兴致盎然...

您现在的位置是:首页 爱折腾 爱折腾详情

Django 执行原始sql

发布时间:2015-5-04 作者:Felix 浏览(1079)

        Django的ORM是以Python类形式定义你的数据模型,ORM将模型与关系数据库连接起来,从而得到一个非常容易使用的数据库API。但是有时候这些并不够用,你可能要书写比较复杂的sql语句或是想提高数据库操作的效率,那么你可以执行原始sql。下面我们看下具体的方法,Django提供了两种方法来执行原始sql:

    第一种,Manager.raw(raw_queryparams=Nonetranslations=None) :

                  执行原始查询并返回模型实例返回的是RawQuerySet,一样可以像QuerySet去迭代。

    第二种,Executing custom SQL directly:

                   直接执行自定义SQL,这种方式可以完全避免数据模型,而是直接执行原始的SQL语句。

    先来看下我们模型:


class Test(models.Model):        
    name = models.CharField(max_length=20)
    content = models.CharField(max_length=50)
    time = models.DateTimeField()
            
    def __unicode__(self):
        return self.name
    
    class Meta:
        verbose_name = u'测试'
        verbose_name_plural = u'测试'

  

    1. raw()方法

>>> from temporary.models import Test                
>>> Test.objects.all()
[<Test: 这是测试标题>, <Test: 买买买>]
>>> tests = Test.objects.raw('select * from temporary_test')
>>> tests
<RawQuerySet: 'select * from temporary_test'>
>>> for t in tests:
...     print t
... 
这是测试标题
买买买




    2. 直接执行自定义的sql

        

>>> from django.db import connection
>>> cursor = connection.cursor()
>>> cursor.excute("select * from temporary_test where id=1")
>>> cur = cursor.execute("select * from temporary_test where id=1")
>>> cur
<django.db.backends.sqlite3.base.SQLiteCursorWrapper object at 0x10263fb00>
>>> row = cur.fetchone()
>>> row
(1, u'\u8fd9\u662f\u6d4b\u8bd5\u6807\u9898', u'\u8fd9\u662f\u6d4b\u8bd5\u5185\u5bb9\u54e6', 
    datetime.datetime(2015, 5, 4, 15, 0, tzinfo=<UTC>))


    

    呃。。。困了,暂时先写到这里吧。

                   

基于 Django 搭建

服务器采用的 阿里云

域名来自 万网

苏ICP备16015443号

©2015-2016 felixglow.com.

GitHub

Design by Felix