我是一个 python 菜鸟,在使用 VADER 完成一些情绪分析后,我在使用 MySQLdb 操作更新表时遇到了问题。脚本如下所示:
#!/usr/bin/env python
from nltk.tokenize import sent_tokenize
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
import MySQLdb as my
try:
db = my.connect(host="*",
user="*",
passwd="*",
db="*")
cur = db.cursor()
cur.execute("SELECT id,content FROM text where relscore >=100")
for row in cur.fetchall():
tableid = row[0]
textin = row[1].rstrip('\n') + ' '
sentences = sent_tokenize(textin)
analyzer = SentimentIntensityAnalyzer()
sum = 0
count = 0
for sentence in sentences:
vs = analyzer.polarity_scores(sentence)
count += 1
sum += vs['compound']
avg = sum / count
cur.execute("update text set sentiment = %s where id = %s",(avg,tableid))
db.close()
except my.Error as e:
print(e)
当我在没有 try/except 的情况下运行它时,它会按预期运行而没有错误,但是数据库中的值没有得到更新。我添加了 try/except 来尝试访问来自 mysql 的任何错误,但是我收到了一个语法错误
except my.Error as e:
^
IndentationError: unindent does not match any outer indentation level
我不明白,因为它似乎与 try 的缩进级别相匹配,而且它看起来像我找到的示例。但就像我说的,我是菜鸟,所以我可能遗漏了一些明显的东西。
我已经用调试器验证了 select 语句正在运行并且正在计算 avg,并且已经验证了用户对数据库和表具有必要的权限。有人可以帮忙吗?
最佳答案
您必须在执行查询后(在关闭光标之前)提交您的更改:
cur.commit()
db.close()
至于 try...except
block :您在 except
单词之前有额外的空间。
关于python mysqldb 表更新不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44836757/