Python的web框架Django的ORM數據庫操作分析

1.建表
首先引用下,可model設定的各種字段類型
在model中建立一個表
from django.db import models

Create your models here.

class Person(models.Model):
#定義一個用戶名字段,不能重複
username = models.CharField(max_length=10,unique=True)
password = models.CharField(max_length=10)
#默認值設定1
age = models.IntegerField()
#False 代表男 True 代表女 女爲1 男爲0
sex = models.BooleanField(default=False)
#可通過指定屬性,來設定生成的列名,但在使用類中還是p_des
p_des = models.CharField(max_length=100,db_column='des')
create_date = models.DateTimeField(auto_now=True)
class Meta:
#指定生成表名,不指定默認生成格式爲APP+類名
db_table = 'user'
python manage.py makemigrations
python manage.py migrate
通過代碼隨機生成些數據,這裏有個小坑,也許會碰到=。=
def addUser(request):
for i in range(5):
person = Person()
num = random.randrange(100)
person.username = 'sola%d' % num
person.password = 'pass%d' % num
person.age = num
person.sex = num % 2
person.save()
return HttpResponse("success")
2.條件查詢
可用過filter與exclude來鏈式查詢。
def getUser(request):
#可以通過filter來查詢(滿足),可以繼續鏈式多個條件。
#users = Person.objects.filter(usernamecontains="5").filter(usernamecontains=3)
#也可以用通過exclude(不滿足),來查詢
users = Person.objects.exclude(usernamecontains="5").filter(usernamecontains="9")
for user in users:
print(user.username)
print(user.create_date)
return HttpResponse("success")
3.另一種添加方法 
def addUserTwo(request):
user = Person.objects.create(username='rui~',password='rui!',age=18)
user.save()
return HttpResponse("success")
4.排序
def getUser(request):
#直接加入order_by即可根據字段排序,默認是正序,前面加減號爲倒敘
users = Person.objects.filter(agein=['73','34','84']).order_by("-username")
for user in users:
print(user.username)
print(user.create_date)
return HttpResponse("success")
5.將數據轉成字典(轉成Map)
def getUser(request):
#values可以直接把結果轉換成字典,字典可通過工具直接轉成JSON
users = Person.objects.filter(age
in=['63','50','36','11']).values()
for user in users:
print(user.username)
print(user.create_date)
print(user.sex)
return HttpResponse("success")
6.二次查詢(查詢結果再次查詢)
def getUser(request):
users = Person.objects.filter(age__in=['63','50','36','11'])
#可以再一次進行查詢
users = users.filter(age='50')
for user in users:
print(user.username)
print(user.create_date)
print(user.sex)
return HttpResponse("success")
7.切片查詢
def getUser(request):
#切片查詢,從第四條開始,到第五條,不能有負數
users = Person.objects.all()[3:5]
for user in users:
print(user.username)
print(user.create_date)
print(user.sex)
return HttpResponse("success")
8.忽略大小寫查詢
查詢前加入i即可
9.更改時間區域設定 
默認Django有一套自定義的時區,與一般的數據庫不匹配,會造成查詢不準確,需要去setting中關閉它
#默認是True,改爲False即可
USE_TZ = False
10.聚合函數
def getUser(request):
#聚合函數,Avg平均,Count數量,Max最大,Min最小,Sum求和;參數填入字段
avgNum = Person.objects.aggregate(Avg("age"))
print(avgNum)
return HttpResponse("success")
11.某一條字段進行對比
def getUser(request):
#一條數據中某字段進行對比,可進行大小等於,包含等
#users = Person.objects.filter(age=F("id"))
#也可以這麼寫,age 大於 id+1
users = Person.objects.filter(agegt=F("id")+1)
function(){ //點值計算器http://www.fx61.com/dotpoint.html
print(users.values())
return HttpResponse("success")
12.邏輯運算符的查詢寫法
def getUser(request):
users = Person.objects.filter(Q(age
gt=90) & Q(age__lt=100))
print(users.values())
return HttpResponse("success")
13.封裝某些默認查詢條件
因爲查詢方法是通過Django在model中自動生成查詢objectsManager,我們可以建立一個類繼承於Manager,並重寫他的查詢方法,再給Model類中賦予對象給objects參數,再通過調用objects參數進行查詢,就會過濾想默認過濾的條件。
model
#歌曲類管理
class SongManager(models.Manager):
def get_queryset(self):
return super(SongManager,self).get_queryset().filter(is_deleter=1)
#繼承歌曲管理類
class Song(models.Model):
name = models.CharField(max_length=50)

length = models.CharField(max_length=10)
is_deleter = models.IntegerField(max_length=1,default=0)
singer = models.CharField(max_length=30) 
objects = SongManager()

views
def getSong(request):
songs = Song.objects.all()
for song in songs:
print(song.name)
return HttpResponse("success")
原文鏈接:blog.csdn.net/jiulanhao/article/details/103027355

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章