python mysqldb 表更新不起作用

标签 python mysql

我是一个 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/

相关文章:

python - 使用 selenium python 按类名查找第 n 个元素

mysql - 选择所有子行都满足条件的父行

php - 在 MysQL 或 PHP 中将记录从一列拆分为两列

mysql - 连接外部MySQL数据库时出现"NameError: uninitialized constant'错误

php - 将 'id' 从一个 php 页面传递到另一个 php 页面

使用 utf8mb4 表情符号时出现 MySQL `where` 错误?

python - 从外部范围阴影名称 xyz

python - pandas 为返回的答案找到对应的行值

python - XLWings/Excel 处理问题 "multi-cell array formulas"

python - 将模型参数的平方和添加到损失函数中