在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  Python  數(shù)據(jù)庫  HTML/ 為什么 django 通過 queryset 的一次簡單數(shù)據(jù)庫操作花費時間那么長

為什么 django 通過 queryset 的一次簡單數(shù)據(jù)庫操作花費時間那么長?

clipboard.png

如圖所示,簡單的增和查操作,花費時間長達1秒 [環(huán)境:windows + python3 + django2 ]。(PS:數(shù)據(jù)量也不多,todo_list 只有2行數(shù)據(jù),依然這么慢)

def get(request):
    # /todo/list 接口處理函數(shù)
    todo_list = list( Todo.objects.all().values('name') )

    return JsonResponse({
        'code': 0,
        'data':   todo_list
    })

@post_method
def add(request):
    # /todo/add 接口處理函數(shù)
    item = Todo.objects.create(name=request.POST['name'])
    return JsonResponse({
        'code': 0,
        'msg': 'add successfully.'
    })

數(shù)據(jù)庫用的mysql, 用默認的 sqlite3 的話則不會那么慢

# settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'ops_chart',
        'USER': 'root',
        'PASSWORD': 'xxxxxx',
        'HOST': 'localhost',
        'PORT': '3306',

        'OPTIONS': {
            'sql_mode': 'STRICT_TRANS_TABLES'
        }
    }
}
回答
編輯回答
巫婆

一般像django和java的hibernate有些相似,它并不會走捷徑。而在真實情況下自己寫sql,就可以簡化sql。而是查詢他需要把對象轉(zhuǎn)sql,返回在把sql轉(zhuǎn)對象,其實就跟電腦一樣,它是一個好學(xué)生,但是它并不聰明,只是你教會它怎么做,它會重復(fù)做你教它的事,你沒教它就不會。
順便放兩組,查看執(zhí)行sql的方法,多讀讀官方的文檔,它會告訴你為什么的

print Province.objects.all().query
from core.models import Province
from django.db import connection
p = Province(name=u'河南', code='0371')
p.save()
2017年10月20日 03:11
編輯回答
壞脾滊

開的debug吧

2018年2月24日 06:05
編輯回答
黑與白

說是數(shù)據(jù)庫操作慢,你連用的是啥數(shù)據(jù)庫也不交代一下嗎?

剛看到,是mysql;直接訪問一下呢,看看對比如何?

2017年12月1日 09:29
編輯回答
空白格

調(diào)試過,發(fā)現(xiàn)sql語句執(zhí)行的耗時并不長。
后來發(fā)現(xiàn),

連接 windows 的mysql服務(wù)會很慢(1s左右),
連接 linux 的mysql服務(wù)就在正常范疇內(nèi)了(100ms左右)。

問題解決,但原因未明。難道是與windows本地的mysql服務(wù)建立連接會比較慢?

2018年4月29日 04:19