引擎和连接执行程序之间的SQLAlchemy性能差异

时间:2019-02-01 12:48:56

标签: python sqlite sqlalchemy

从性能的角度来看,我在使用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查询一起使用的正确方法是什么?

谢谢。

0 个答案:

没有答案