2015-12-15 147 views
0

我有下面的语法。第一个cursor.execute \ fetchone拉回我想要更新的那一行。但是当我尝试运行更新查询时,它会更新多个记录。pymssql sql更新语句

cursor.execute("Select * FROM [DisneyConvoIndex] where [ConversationBaseIndex]=%s order by length DESC;", '0101CFE27C560BEB6C1073FBF741997D79EDBD4610AC') 

row = cursor.fetchone() 

for row in row: 
    cursor.execute("UPDATE [DisneyConvoIndex] set [toreview] = 'yes'") 

回答

1

您试图在返回它之后更新该行。你只是在处理数据,而不是数据库中的对象。您需要使用where子句限制要更新的行。因此,使用类似

cursor.execute("UPDATE [DisneyConvoIndex] set [toreview] = 'yes' WHERE [ConversationBaseIndex]=%s", '0101CFE27C560BEB6C1073FBF741997D79EDBD4610AC'

+0

虽然我已经硬编码值到这个声明进行测试,我会在整个SQL数据库需要循环(我被这个分组[ConversationBaseIndex]字段,拉回最小行并更新那一行。我尝试了限制一种语法,但无法让它工作。 – lelarider

+0

@lelarider - 你似乎缺少的一点是,现在你的第二个查询总是会更新所有的行,因为它不包含WHERE子句,即使你已经为这两个查询使用了相同的“游标”对象,第二个查询与第一个查询无关,但你需要循环遍历第一个查询的结果并将返回的值用作WHERE clau的参数您的第二个查询的答案如本答案中所示。 –