Python SQL—如何获取大量数据,而不是迭代每个查询

Python SQL—如何获取大量数据,而不是迭代每个查询,python,sql,sql-server,sql-server-2012,Python,Sql,Sql Server,Sql Server 2012,我收集每个项目的项目列表,我使用SQL查询检查数据库,代码如下: SELECT * FROM task_activity as ja join task as j on ja.task_id = j.id WHERE j.name = '%s' AND ja.avg_runtime <> 0 AND ja.avg_runtime is not NULL AND ja.id = (SELECT MAX(id) FROM task_activity

我收集每个项目的项目列表,我使用SQL查询检查数据库,代码如下:

SELECT * 
FROM task_activity as ja 
join task as j on ja.task_id = j.id 
WHERE j.name = '%s' 
  AND ja.avg_runtime <> 0 
  AND ja.avg_runtime is not NULL 
  AND ja.id = (SELECT MAX(id) FROM task_activity 
               WHERE task_id = ja.task_id 
                 and avg_runtime <> 0 
                 AND ja.avg_runtime is not NULL) 
  % str(task.get('name'))).fetchall()
但是我是否需要遍历列表并为每个人查询。这个清单有时相当大。我可以只进行一次查询并获取列表数据集吗? 在这个特定的查询中,我只查找带有任务id的avg_runtime列,最大id将是最后计算的运行时


除此之外,我无法访问数据库进行查询。使用Microsoft SQL Server 2012 SP1-11.0.3349.0 X64,您可能可以使用行号来加快速度。注意,我认为您的原始查询中有一个bug。子查询中的ja.avg_运行时应该是avg_运行时吗

sql=以x为单位 选择 任务id, 平均运行时间, 身份证件 按ja.task划分的分区上的行数按ja.id描述的顺序 从…起 作为ja的任务单元活动 参加 作为j的任务 关于ja.task_id=j.id 哪里 j、 {0}中的名称和 ja.avg_运行时0和 ja.avg_运行时不为空 选择 任务id, 平均运行时间, 身份证件 从…起 x 哪里 rn=1; 建立用于参数替换 假设tasknames是包含任务名称的列表。 参数=,.jointasknames.maplambda x:? 连接是您的数据库连接 cursor=connection.cursor 插入?,?,?和绑定参数 cursor.executesql.formatparams,任务名 cursor.fetchall 以下索引应使此查询非常快速,尽管它取决于ja.avg_运行时上的筛选器排除了多少行:


你会看到编辑有什么影响吗?基本上,我用格式化程序输入任务的名称。@user3590149您需要在'%s','%s2',..中使用j.name构建SQL。。。。我不确定你用什么语言来建立这个。就目前的情况来看,它似乎有点倾向于SQL注入。@user3590149我没有太多地使用Python,但我已经加入了一些东西来构建一些用于替换的参数,然后执行它们。你得填补我知识上的一些空白。你用的是什么数据库库?在这个例子中,我假设ODBC是pyodbc。我要到明天才能测试它。“创建索引”是如何工作的?这是另一个问题吗?
create index ix_task_id_id on task_activity (task_id, id desc);