Разница в производительности SQLAlchemy между движком и выполнением соединения - PullRequest
0 голосов
/ 01 февраля 2019

Я испытываю странное поведение с SQLALchemy с точки зрения производительности.Я создал этот простой тестовый скрипт:

from sqlalchemy import *
from time import clock, time
from datetime import datetime
import os

s = "Start: "+str(datetime.now())+"\n"
engine = create_engine("sqlite:///C:/mydb.db?check_same_thread=False")
print engine

ids = ('ecab910b-261b-11e9-9479-5800e3d291a6',
'ecab90f0-261b-11e9-8801-5800e3d291a6', 
'ecab90f1-261b-11e9-bcf7-5800e3d291a6', 
'ecab90f2-261b-11e9-a7c1-5800e3d291a6', 
'ecab90f3-261b-11e9-b8d0-5800e3d291a6', 
'ecab90f4-261b-11e9-8a61-5800e3d291a6', 
'ecab90f5-261b-11e9-a11a-5800e3d291a6', 
'ecab90f6-261b-11e9-9a55-5800e3d291a6',
'ecab90f7-261b-11e9-b16e-5800e3d291a6', 
'ecab90f8-261b-11e9-82a6-5800e3d291a6', 
'ecab90f9-261b-11e9-ad9d-5800e3d291a6', 
'ecab90fa-261b-11e9-ae23-5800e3d291a6', 
'ecab90fb-261b-11e9-93a5-5800e3d291a6',
'ecab90fc-261b-11e9-b963-5800e3d291a6',
'ecab90fd-261b-11e9-b875-5800e3d291a6',
'ecab90fe-261b-11e9-ae90-5800e3d291a6',
'ecab90ff-261b-11e9-8e07-5800e3d291a6',
'ecab9101-261b-11e9-8808-5800e3d291a6',
'ecab9102-261b-11e9-82e5-5800e3d291a6',
'ecab9103-261b-11e9-80e7-5800e3d291a6',
'ecab9108-261b-11e9-ad8c-5800e3d291a6',
'ecab9109-261b-11e9-80d0-5800e3d291a6',
'ecab910a-261b-11e9-9c5d-5800e3d291a6',
'ecab910d-261b-11e9-86f7-5800e3d291a6',
'ecab910e-261b-11e9-9322-5800e3d291a6', 
'ecab910f-261b-11e9-b454-5800e3d291a6', 
'ecab9114-261b-11e9-b1ec-5800e3d291a6', 
'ecab911b-261b-11e9-b40c-5800e3d291a6')

metadata = MetaData(engine) 
tab = Table("mytab", metadata, autoload=True)
q = update(tab, tab.c.id.in_(ids), {"status":5})

conn = engine.connect()
el = clock()
conn.execute(q)
s += "Elapsed (from connection) = %f\n" %(clock()-el)

el = clock()
q.execute()
s += "Elapsed (from engine) = %f\n" %(clock()-el)
print s

В этом скрипте я просто сравниваю время выполнения, когда запрос выполняется из механизма и из соединения.Вот результат:

Engine(sqlite:///C:/mydb.db?check_same_thread=False)
Start: 2019-02-01 13:41:28.771000
Elapsed (from connection) = 0.007447
Elapsed (from engine) = 0.576755

Может ли кто-нибудь помочь мне понять, почему существует такая огромная разница в выполнении, и что должно быть правильным подходом для использования SQLAlchemy с запросами не-ORM?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...