2015-12-15 183 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的參數您的第二個查詢的答案如本答案中所示。 –