2017-06-30 8 views
1

私はPythonのnoobです。VADERを使っていくつかの感情分析を行った後、MySQLdb操作でテーブルを更新するのに問題があります。スクリプトは次のようになります。python 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) 

私はエラーなしで期待どおりに実行します、を除いて/試しせずにこれを実行しましたが、値がDBに更新されませんでしたとき。 、私は、MySQLからエラーにアクセスしようとする以外に試して/追加しましたが、私はそれを試してみるのインデントレベルを一致させるように見えるので、私はそれを取得しないこと

 except my.Error as e: 
         ^
IndentationError: unindent does not match any outer indentation level 

で構文エラーを取得しています私が見つけた例のように見えます。しかし、私はノブだと言ったように、私はおそらく明らかに何かを欠いているでしょう。

私は、デバッガでselect文が動作しており、avgが計算されていることを確認し、ユーザがdbとtableに必要な権限を持っていることを確認しました。助けてもらえますか?

+0

を再テスト:.削除してもう一度テストしてください –

答えて

0

あなたは(あなたのカーソルを閉じる前に)クエリを実行した後、変更をコミットする必要があります:try...exceptブロックについては

cur.commit() 
db.close() 

を:あなたはexcept単語の前に余分なスペースを持っています。

+0

Apprentlyそれはdb.commitでなければなりません。それが機能しました。ありがとう。 – Steve

0

あなたはeとmy.Error以外の前にスペースを持っている:

それを削除し、スペースをeとmy.Error除い前にそこにある

#!/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/float(count) 

     cur.execute("UPDATE text SET `sentiment` = %s WHERE `id` = %s", (avg,tableid)) 

    db.commit() 
    cur.close() 
    db.close() 

except Exception as e: 
    print(e) 
関連する問題