python - 引擎和连接执行之间的 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 查询一起使用的正确方法是什么?
提前致谢。
解决方案
推荐阅读
- ember-octane - 基于 ember octane 中选择的答案的基于条件的显示部分
- django - 为父母和孩子显示产品的类别和子类别
- .net-core - .Net Core 或 .Net 5 中的 Membership.ValidateUser()
- c++ - 如何解决 gcc 中的 c++ std::rintf 问题
- java - 如何从java中的s3输入流中获取值
- c# - StackExchange.Redis 超时处理
- r - 从插入符号的训练函数中提取预测
- python - 使用 Asyncio 模块多次调用 url,没有获得性能优势
- .net-core - dotnet核心控制台启动时如何运行特定服务
- javascript - 如何使用 JavaScript 打开锚上下文菜单?