SQL:如何使用pyodbc从select查询中获取最新的/max-Id



我正在尝试使用pyodbc库执行SQL选择查询,但无法从数据库中找到最后一个或最大行ID。

import pyodbc
conn = pyodbc.connect(r"Driver={ODBC Driver 13 for SQL Server}; Server=XXXX; Database=sampleDb; Trusted_Connection=yes;")
cursor = conn.cursor()
cursor.execute("select Id, text from Table1 where dataexecuted IS NULL AND text is not null")
newdata = cursor.fetchall()
for l in newdata:
rowId = l.Id
rowId = max(rowId)
print(rowId)

我也尝试过以这种方式查找数据,但显示错误

select max(Id) as lastid, Id, text from Table1 where dataexecuted IS NULL AND text is not null

如果你想要的只是最大ID值,那么你可以在一个非常简单的查询中完成:

SELECT Max(Id) AS maximum_id
FROM   Table1
WHERE  dataexecuted IS NULL
AND    text IS NOT NULL
;

然后,您可以使用cursor.fetchone()来获得单行结果集。

更新:对于单个标量值,fetchone()的替代方案是fetchval()

maxid = cursor.execute("select max(Id) from Table1;").fetchval()

可能确切的要求从问题中还不清楚。但是,如果您只是想解决错误并找到Id的最大值,那么更改sql查询应该会有所帮助。

--removed Id, text columns from select -- this query will give absolute max value of ID
select max(Id) as lastid from Table1 where dataexecuted IS NULL AND text is not null 
-- added Id, text in group by -- this query will give max Id for each set of text column value.
select max(Id) as lastid, Id, text from Table1 where dataexecuted IS NULL AND text is not null group by Id, text

使用哪个查询取决于您的需求。

并且不需要使用for循环迭代结果集来从数据库中查找max值或任何aggregate值,这不是一种非常有效的方法。

要从数据库中获取最大id,请使用以下命令:

cursor.execute("select max(id) from Table1 where dataexecuted IS NULL AND text is not null;")
result = cursor.fetchone()
conn.commit;

结果将具有结构(id,(。您可以通过result[0]来选择它。

如果你写

cursor.execute("select max(id) from Table1 where dataexecuted IS NULL AND text is not null;").fetchone()

您可能会得到AttributeError:"NoneType"对象没有属性"fetchone">,因为execute的reture对象为none。

相关内容

  • 没有找到相关文章

最新更新