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");