我正在努力从 SQL Server 2008 R2 表中提取客户服务票证的措辞(“注释”),然后运行情绪分析并使用该分析来更新同一表中的“情绪”字段。以下是有关表字段的更多信息:
TicketNoteID(PK, int, not null)
TicketID (FK, int, not null)
UserName (varchar(20), not null)
Note (varchar(max), not null)
Author (varchar(50), not null)
isExternal (bit, null)
DateTimeCreated (datetime, not null)
NoteID (int, null)
DateTimeUploaded (datetime, null)
Error (bit, null)
ErrorMessage (varchar(max), null)
Sentiment (float, null)
当我运行以下代码时,出现此错误:
pyodbc.ProgrammingError: No results. Previous SQL was not a query.
我已经根据有关同一错误的其他帖子对我的代码进行了建模,但我找不到任何可以解决该问题的内容。代码如下:
import pyodbc
from textblob import TextBlob
cnxn = pyodbc.connect(r'DRIVER={SQL Server Native Client 11.0};SERVER=...')
cur = cnxn.cursor()
sql = """
SELECT Note
FROM dbo.DSDTicketNotes
where Sentiment is NULL
"""
rows = cur.execute(sql)
for row in rows:
note = cur.fetchone()
row = str(note)
blob = TextBlob(row)
sent = blob.sentiment.polarity
sentUpdate = cur.execute("UPDATE dbo.DSDTicketNotes SET Sentiment = ?", sent)
cur.close()
cnxn.close()
感谢您的帮助!
最佳答案
不可能同时迭代游标结果和使用相同游标执行其他语句。
如果要求是迭代SELECT
逐一显示结果(例如,结果太大而无法放入内存)并采取行动,管理两个游标:
...
selectCur = cnxn.cursor()
updateCur = cnxn.cursor()
selectSQL = """
SELECT TicketNoteID, Note
FROM dbo.DSDTicketNotes
where Sentiment is NULL
"""
updateSQL = """
UPDATE dbo.DSDTicketNotes
SET Sentiment = ?
WHERE TicketNoteID = ?
"""
for row in selCur.execute(selectSQL):
id = row[0]
blob = TextBlob(str(row[1]))
sent = blob.sentiment.polarity
updateCur = updateCur.execute(updateSQL, (sent, id))
updateCur.commit()
...
或者如果 SELECT
结果集总是很小,将结果拉入列表中进行迭代。这允许光标重用:
...
cur = cnxn.cursor()
selectSQL = """
SELECT TicketNoteID, Note
FROM dbo.DSDTicketNotes
where Sentiment is NULL
"""
updateSQL = """
UPDATE dbo.DSDTicketNotes
SET Sentiment = ?
WHERE TicketNoteID = ?
"""
rows = cur.execute(selectSQL).fetchall()
for row in rows:
id = row[0]
blob = TextBlob(str(row[1]))
sent = blob.sentiment.polarity
cur = cur.execute(updateSQL, (sent, id))
cur.commit()
...
无论使用哪种方法,您都需要将主键包含在 SELECT
中所以它可以用来UPDATE
正在处理的特定行。
关于python - PyODBC 迭代更新 - "Not a Query",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36204527/