Django 數據庫查詢


 

Django 數據庫查詢

 

 

birthday__year=2006 
headline__startswith='What' 等價於 headline__startswith like 'What%'
headline__endswith='What' 等價於 headline__startswith like '%What'
birthday__gte=datetime.now() 等價於 birthday__gte >= datetime.now()
birthday__lte=datetime.now() 等價於 birthday__gte <= datetime.now()
pk__gt=14 等價於 pk>14
name__icontains="food" 等價於 name like "%food%"
headline__exact="Man bites dog" 等價於 headline = 'Man bites dog';
name__iexact="beatles blog" 查找name="beatles blog"的對象,不區分大小寫
name__isnull=True 查詢的是name為null的值
pk__in=[1,4,7] 等價於 id in{1,4,7} 

一對多
many端
e = Entry.objects.get(id=2) 
print e.blog

one端
b = Blog.objects.get(id=1)
b.entry_set.all()
b.entry_set.count() 

 

 

 

#!/usr/bin/python
#coding:utf-8

from django.shortcuts import render;
from django.shortcuts import render_to_response;
from django.http import HttpResponse;
from django.template import loader,Context, Template;
from django.http import HttpResponseRedirect;
from django.views.decorators.csrf import csrf_exempt;
import time, datetime;
from django.db import connection,transaction;

from blog.models import Blog;
from blog.models import Entry;
from blog.models import Author;
from blog.models import AuthorBlog;


def saveBlog(request):
    try:
        blog=Blog();
        blog.name="python";
        blog.tagline="Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。自從20世紀90年代初Python語言誕生至今,它逐漸被廣泛應用於處理系統管理任務和Web編程。";
        blog.save();
        return HttpResponse("save blog success");
    except BaseException, e:
        return HttpResponse("save blog failure:"+e);
        
def updateBlog(request):
    try:
        blog=Blog.objects.get(id=4);
        blog.tagline="Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。";
        blog.save();
        return HttpResponse("update blog success");
    except BaseException, e:
        return HttpResponse("update blog failure:"+e);

def delBlog(request):
    try:
        blog=Blog.objects.get(id=4);
        #blog.delete();
        return HttpResponse("delete blog success");
    except BaseException, e:
        return HttpResponse("delete blog failure:"+e);

###一對多添加###
def saveEntry(request):
    try:
        blog=Blog.objects.get(id=4); #python
        entry=Entry();   
        entry.headline="django";
        entry.body_text="Django是一個開放源代碼的Web應用框架,由Python寫成。";
        entry.pub_date=datetime.date.today();
        entry.blog=blog;
        entry.save();
        return HttpResponse("save entry success");
    except BaseException, e:
        return HttpResponse("save entry failure:"+e);

###多對多添加###
def saveAuthorBlog(request):
    try:
        author=Author.objects.get(id=1);
        blog=Blog.objects.get(id=4);
        ab=AuthorBlog();
        ab.author=author;
        ab.blog=blog;
        ab.created_at=datetime.date.today();
        ab.save();
        return HttpResponse("save AuthorBlog success");
    except BaseException, e:
        return HttpResponse("save AuthorBlog failure:"+e);
      
def queryBlog(request):
    #檢索所有的對象
    blogs = Blog.objects.all();
    for blog in blogs:
        print blog.name;
    print "=======";
    
    #多對一查詢
    entrys=Entry.objects.all();
    for entry in entrys:
        print entry.headline+", "+entry.blog.id+", "+entry.blog.name;
    print "=======";
    
    return HttpResponse("queryBlog");
    
###執行原生查詢並返回模型實例###
def rawBlog(request):
    raw_sql = 'select * from blog_Blog';
    blogs=Blog.objects.raw(raw_sql); #xx.objects.raw()執行原始sql
    print blogs;
    for blog in blogs:
        print blog.name;
    print "======";
    
    raw_sql = 'select * from blog_Blog o where o.name=%s'; #帶參數
    blogs=Blog.objects.raw(raw_sql, ["j2ee"]); #xx.objects.raw()執行原始sql
    print blogs;
    for blog in blogs:
        print blog.name;
    return HttpResponse("rawBlog");
    
def sqlBlog(request):
    cursor=connection.cursor(); #獲得一個游標(cursor)對象
    
    #更新操作
    cursor.execute('update blog_Blog set name="hadoop168" where id=%s', [1]); #執行sql語句
    transaction.commit_unless_managed(); #提交到數據庫
    
    #查詢操作
    cursor.execute('select * from blog_Blog where id=%s', [1]);
    blogs = cursor.fetchone(); #或使用 #raw = cursor.fetchall();返回的結果集是個元組
    for blog in blogs:
        print blog;
    print "======";
    
    cursor.execute('select * from blog_Blog');
    blogs = cursor.fetchall(); #返回的結果集是個元組
    for blog in list(blogs):
        print str(blog[0])+", "+blog[1]+", "+blog[2];
    print "======";
    
    return HttpResponse("sqlBlog");

def querySqlBlog(request):
    sql="select b.name as blog_name, e.headline from blog_Blog b, blog_Entry e where b.id=e.blog_id";
    cursor=connection.cursor(); #獲得一個游標(cursor)對象
    cursor.execute(sql);
    blogs = cursor.fetchall(); #返回的結果集是個元組
    
    records=[]
    for blog in blogs:
        dic={}
        dic['blog_name']=blog[0]
        dic['headline']=blog[1]
        records.append(dic);
    
    for record in records:
        print record["blog_name"]+", "+record["headline"];
    return HttpResponse("sqlBlog");
    
def searchBlog(request):
    #檢索所有的對象
    #blogs = Blog.objects.all(); #使用all()方法返回數據庫中的所有對象
    
    #檢索特定的對象,使用以下兩種方法: 
    #fileter()  返回一個與參數匹配的QuerySet,相當於等於(=)
    #exclude()  返回一個與參數不匹配的QuerySet,相當於不等於(!=)
    
    #blogs=Blog.objects.filter(name='python'); 等同於:slect * from blog_Blog where name='python' 
    #不使用Blog.objects.all().filter(name='python'),雖然也能運行,all()最好再獲取所有的對象時使用。 
    blogs=Blog.objects.filter(name='python');
    for blog in list(blogs):
        print str(blog.id)+", "+blog.name+", "+blog.tagline;
    print "======";
    
    return HttpResponse("searchBlog");
    
    
    
    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM