PYODBC MS Access插入错误 - 参数太少

时间:2016-02-19 13:38:07

标签: python twitter ms-access-2013 pyodbc

我目前正在开发一个项目,该项目接受推文并进行快速情绪分析,并将推文ID,推文日期,推文文本和推文的情绪极性加载到MS Access中表(Office 2013)。我已将输出转换为字符串,但情绪极性除外,以匹配表(测试)数据类型。这是我的代码:

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   驱动程序]参数太少。预期4.(-3010)(SQLExecDirectW)')

我已经看到有关此错误的其他帖子,但大多数都是由于Access中的双引号问题。因为我只使用单引号仍然得到问题,我很难过。这让我疯了!任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

您的SQL语句包含标识符IdentTweetDate等,作为文字文本,Access数据库引擎将它们视为参数占位符。您需要做的是在命令文本中创建实际参数占位符,然后传递参数 values 。例如:

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