6. Django中models利用ORM對Mysql進行查表的語句(多個語句)?
字段查詢
all():返回模型類對應表格中的所有數據。
get():返回表格中滿足條件的一條數據,如果查到多條數據,則拋異常:MultipleObjectsReturned,
查詢不到數據,則拋異常:DoesNotExist。
filter():參數寫查詢條件,返回滿足條件 QuerySet 集合數據。
條件格式:
模型類屬性名__條件名=值
注意:此處是模型類屬性名,不是表中的字段名
關於 filter 具體案例如下:
判等 exact。
BookInfo.object.filter(id=1)
BookInfo.object.filter(id__exact=1)此處的__exact 可以省略
模糊查詢 like
例:查詢書名包含'傳'的圖書。contains
1. contains BookInfo.objects.filter(btitle__contains=’傳’)
空查詢 where 字段名 isnull
1. BookInfo.objects.filter(btitle__isnull=False)
范圍查詢 where id in (1,3,5)
1. BookInfo.objects.filter(id__in=[1,3,5])
比較查詢 gt lt(less than) gte(equal) lte
1. BookInfo.objects.filter(id__gte=3)
日期查詢
1. BookInfo.objects.filter(bpub_date__year = 1980)
2. BookInfo.objects.filter(bpub_date__gt = date(1980,1,1))
exclude:返回不滿足條件的數據。
3. BookInfo.objects.exclude(id=3)
F 對象
作用:用於類屬性之間的比較條件。
1. from django.db.models import F
2. 例:where bread > bcomment BookInfo.objects.filter(bread__gt =F(‘bcomment’))
3. 例:BookInfo.objects.filter(bread__gt=F(‘bcomment’)*2)
Q 對象
作用:用於查詢時的邏輯條件。可以對 Q 對象進行&|~操作。
1. from django.db.models import Q
2. BookInfo.objects.filter(id__gt=3, bread__gt=30)
3. BooInfo.objects.filter(Q(id__gt=3) & Q(bread__gt=3))
4. 例:BookInfo.objects.filter(Q(id__gt=3) | Q(bread__gt=30))
5. 例:BookInfo.objects.filter(~Q(id=3))
order_by 返回 QuerySet
作用:對查詢結果進行排序。
1. 例: BookInfo.objects.all().order_by('id')
2. 例: BookInfo.objects.all().order_by('-id')
3. 例:BookInfo.objects.filter(id__gt=3).order_by('-bread')
聚合函數
作用:對查詢結果進行聚合操作。
1. sum count max min avg
aggregate:調用這個函數來使用聚合。
1. from django.db.models import Sum,Count,Max,Min,Avg
2. 例:BookInfo.objects.aggregate(Count('id'))
{'id__count': 5} 注意返回值類型及鍵名
1. 例:BookInfo.objects.aggregate(Sum(‘bread’))
{‘bread__sum’:120} 注意返回值類型及鍵名
count 函數
作用:統計滿足條件數據的數目。
例:統計所有圖書的數目。
1. BookInfo.objects.all().count()
例:統計 id 大於 3 的所有圖書的數目。
1. BookInfo.objects.filter(id__gt = 3).count()
模型類關系
一對多關系
例:圖書類-英雄類
models.ForeignKey() 定義在多的類中。
2)多對多關系
例:新聞類-新聞類型類
models.ManyToManyField() 定義在哪個類中都可以。
3)一對一關系
例:員工基本信息類-員工詳細信息類
models.OneToOneField() 定義在哪個類中都可以。
7. django中間件的使用?
面試官問你Django中間件的時候,我們不應該只是局限於面試官的問題,而應做到舉一反三。
面試之前准備一些白紙,在問到一些問題的時候應該用畫圖的形式展示出來
比如這里問到Django的中間件,我們應該給面試官畫出Django的生命周期整體流程圖,把中間件作為一部分的回答內容,
這樣的好處在於,即展示了你對Django從前到后的流程都很熟悉又回答了面試官的問題,還順帶秀了一把其他技能,一舉兩得。
中間件介紹:作為Django的門戶,一切請求都會先經過中間件才會到達Django后端,所以中間件可以用來做全局方面的一些功能
詳細:給我們定義了五個方法
1.def process_request(request):
pass
2.def process_view(request):
pass
3.def process_template_response(request):
pass
4.def process_exception(request):
pass
5.def process_response(request):
pass
這些內容應該做到快速回答,不要"慢條斯理"的,搞IT的都很忙好吧,知識點一定要掌握牢固,脫口而出
一定要記住你是需要在有限的時間內將自己的看家本領不遺余力的傾囊而出
8. 談一下你對uWSGI和 nginx的理解?
1.uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是與uWSGI服務器進行交換。WSGI是一種Web服務器網關接口。它是一個Web服務器(如nginx,uWSGI等服務器)與web應用(如用Flask框架寫的程序)通信的一種規范。
要注意 WSGI / uwsgi / uWSGI 這三個概念的區分。
WSGI是一種通信協議。
uwsgi是一種線路協議而不是通信協議,在此常用於在uWSGI服務器與其他網絡服務器的數據通信。
uWSGI是實現了uwsgi和WSGI兩種協議的Web服務器。
2. nginx是一個開源的高性能的HTTP服務器和反向代理:
1.作為web服務器,它處理靜態文件和索引文件效果非常高;
2.它的設計非常注重效率,最大支持5萬個並發連接,但只占用很少的內存空間;
3.穩定性高,配置簡潔;
4.強大的反向代理和負載均衡功能,平衡集群中各個服務器的負載壓力應用。
9. 說說nginx和uWISG 服務器之間如何配合工作的?
首先瀏覽器發起http請求到nginx服務器,Nginx根據接收到請求包,進行url分析,判斷訪問的資源類型,如果是靜態資源,直接讀取靜態資源返回給瀏覽器,如果請求的是動態資源就轉交給uwsgi服務器,uwsgi服務器根據自身的uwsgi和WSGI協議,找到對應的Django框架,Django框架下的應用進行邏輯處理后,將返回值發送到uwsgi服務器,然后uwsgi服務器再返回給nginx,最后nginx將返回值返回給瀏覽器進行渲染顯示給用戶。 如果可以,畫圖講解效果更佳,可以 將下面的圖畫給面試官。
10. django開發中數據庫做過什么優化?
1.設計表時,盡量少使用外鍵,因為外鍵約束會影響插入和刪除性能;
2.使用緩存,減少對數據庫的訪問;
3.在orm框架下設置表時,能用varchar確定字段長度時,就別用text;
4.可以給搜索頻率高的字段屬性,在定義時創建索引;
5.Django orm框架下的Querysets 本來就有緩存的;
6.如果一個頁面需要多次連接數據庫,最好一次性取出所有需要的數據,減少對數據庫的查詢次數;
7.若頁面只需要數據庫里某一個兩個字段時,可以用QuerySet.values();
8.在模板標簽里使用with標簽可以緩存Qset的查詢結果。