溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python的web框架Django的ORM數(shù)據(jù)庫操作分析

發(fā)布時(shí)間:2020-04-26 14:41:38 來源:網(wǎng)絡(luò) 閱讀:145 作者:專注地一哥 欄目:編程語言

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

Create your models here.

class Person(models.Model):
#定義一個(gè)用戶名字段,不能重復(fù)
username = models.CharField(max_length=10,unique=True)
password = models.CharField(max_length=10)
#默認(rèn)值設(shè)定1
age = models.IntegerField()
#False 代表男 True 代表女 女為1 男為0
sex = models.BooleanField(default=False)
#可通過指定屬性,來設(shè)定生成的列名,但在使用類中還是p_des
p_des = models.CharField(max_length=100,db_column='des')
create_date = models.DateTimeField(auto_now=True)
class Meta:
#指定生成表名,不指定默認(rèn)生成格式為APP+類名
db_table = 'user'
python manage.py makemigrations
python manage.py migrate
通過代碼隨機(jī)生成些數(shù)據(jù),這里有個(gè)小坑,也許會(huì)碰到=。=
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來鏈?zhǔn)讲樵儭?br/>def getUser(request):
#可以通過filter來查詢(滿足),可以繼續(xù)鏈?zhǔn)蕉鄠€(gè)條件。
#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即可根據(jù)字段排序,默認(rèn)是正序,前面加減號(hào)為倒敘
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.將數(shù)據(jù)轉(zhuǎn)成字典(轉(zhuǎn)成Map)
def getUser(request):
#values可以直接把結(jié)果轉(zhuǎn)換成字典,字典可通過工具直接轉(zhuǎn)成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.二次查詢(查詢結(jié)果再次查詢)
def getUser(request):
users = Person.objects.filter(age__in=['63','50','36','11'])
#可以再一次進(jìn)行查詢
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):
#切片查詢,從第四條開始,到第五條,不能有負(fù)數(shù)
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.更改時(shí)間區(qū)域設(shè)定?
默認(rèn)Django有一套自定義的時(shí)區(qū),與一般的數(shù)據(jù)庫不匹配,會(huì)造成查詢不準(zhǔn)確,需要去setting中關(guān)閉它
#默認(rèn)是True,改為False即可
USE_TZ = False
10.聚合函數(shù)
def getUser(request):
#聚合函數(shù),Avg平均,Count數(shù)量,Max最大,Min最小,Sum求和;參數(shù)填入字段
avgNum = Person.objects.aggregate(Avg("age"))
print(avgNum)
return HttpResponse("success")
11.某一條字段進(jìn)行對(duì)比
def getUser(request):
#一條數(shù)據(jù)中某字段進(jìn)行對(duì)比,可進(jìn)行大小等于,包含等
#users = Person.objects.filter(age=F("id"))
#也可以這么寫,age 大于 id+1
users = Person.objects.filter(agegt=F("id")+1)
function(){ //點(diǎn)值計(jì)算器http://www.fx61.com/dotpoint.html
print(users.values())
return HttpResponse("success")
12.邏輯運(yùn)算符的查詢寫法
def getUser(request):
users = Person.objects.filter(Q(age
gt=90) & Q(age__lt=100))
print(users.values())
return HttpResponse("success")
13.封裝某些默認(rèn)查詢條件
因?yàn)椴樵兎椒ㄊ峭ㄟ^Django在model中自動(dòng)生成查詢objectsManager,我們可以建立一個(gè)類繼承于Manager,并重寫他的查詢方法,再給Model類中賦予對(duì)象給objects參數(shù),再通過調(diào)用objects參數(shù)進(jìn)行查詢,就會(huì)過濾想默認(rèn)過濾的條件。
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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI