2016-02-19 42 views
2

我目前正在研究一个需要推文并进行快速情绪分析并加载推文ID,推文日期,推文文本以及推文情绪的项目极性插入MS Access表(Office 2013)。我已将输出转换为字符串,但情感极性与表(Test)数据类型相匹配。这里是我的代码:PYODBC MS Access插入错误 - 太少参数

from pattern.web import Twitter 
import time 
import pyodbc 
from textblob import TextBlob 

cnxn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:...SentimentAnalysis.accdb;') 
cursor = cnxn.cursor() 

s = Twitter().stream('#testhash') 
for i in range(25): 
    time.sleep(1) 
    s.update(bytes=1024) 
    if s: 
     Ident = str(s[-1].id) 
     TweetDate = str(s[-1].date) 
     TweetText = str(s[-1].text.encode('utf8')) 
     x = s[-1].text 
     blob = TextBlob(x) 
     sent = blob.sentiment.polarity 
     cursor.execute('insert into Test([Ident],[TweetDate],[TweetText],[TweetSentiment]) values (Ident,TweetDate,TweetText,sent);') 
     cnxn.commit() 
     print 'Inserted: ', Ident 
    else: '' 
    s.clear() 

的问题是,我得到以下错误:

pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 4. (-3010) (SQLExecDirectW)')

我见过的其他职位上的这个错误,但大多数都只是是由于在双引号问题访问。由于我只用了单引号,仍然遇到问题,所以我很难过。这让我疯狂!任何帮助将不胜感激!

回答

3

您的SQL语句包含Ident,TweetDate等标识符作为文本文本,并且Access Datatabase Engine将它们视为参数占位符。你需要做的是在你的命令文本中创建实际的参数占位符,然后通过参数。例如:

sql = """\ 
INSERT INTO [Test] ([Ident], [TweetDate], [TweetText], [TweetSentiment]) 
VALUES (?,?,?,?) 
""" 
params = (Ident, TweetDate, TweetText, sent) 
cursor.execute(sql, params) 
cnxn.commit() 
+0

这工作完美戈登!谢谢! – swaters