【发布时间】:2012-03-25 02:34:09
【问题描述】:
import pyodbc,nltk,array
cnxn = pyodbc.connect('Driver={MySQL ODBC 5.1 Driver};Server=127.0.0.1;Port=3306;Database=information_schema;User=root; Password=1234;Option=3;')
cursor = cnxn.cursor()
cursor.execute("use collegedatabase ;")
cursor.execute("select * from sampledata ; ")
cnxn.commit()
s=[]
j=[]
x=[]
words = []
w = []
sfq = []
POS=[]
for entry in cursor:
s.append(entry.injury_type),j.append(entry.injury_desc)
from nltk.tokenize import PunktWordTokenizer
from nltk.corpus import stopwords
tokenizer = PunktWordTokenizer()
english_stops = set(stopwords.words('english'))
for i in range(0,26): # filter stop words
tokenizer.tokenize(j[i])
w.append([word for word in tokenizer.tokenize(j[i]) if word not in english_stops])
for a in range(0 , 26):#CONVERTING tokenzied text ito a string
sfq.append(" ".join(w[a]))
from replacers import RegexpReplacer
replacer = RegexpReplacer()
for a in range (0,26):#POS TAGGING
replacer.replace(sfq[a])
POS.append(tokenizer.tokenize(sfq[a]))
x.append(nltk.pos_tag(POS[a]))
cursor.executemany("update sampledata SET POS = %s where SRNO =%d",(x[a],a))
我得到的错误是:
回溯(最近一次通话最后): 文件“C:\Users\Vaibhav\Dropbox\DUE BY MONDAY\tryingtofixerror.py”,第 35 行,在 cursor.executemany("更新样本数据 SET POS = %s where SRNO =%d",(x[a],a)) ProgrammingError: ('SQL 包含 0 个参数标记,但提供了 50 个参数', 'HY000')在浏览找到问题的解决方案后,我想用此语句替换最后一行(第 35 行)
cursor.executemany((u'update sampledata SET POS = %s where SRNO =%d'.encode('utf-8'),(x[a],a))(u'MO-MK25'.encode('utf-8')))
我不知道我是否朝着正确的方向前进,但是浏览了这么多网站和论坛,我得到了一个提示,可能存在缩进或逗号错误。我不知道还能做什么。顺便说一下,生成的错误代码如下:
回溯(最近一次通话最后): 文件“C:\Users\Vaibhav\Dropbox\DUE BY MONDAY\tryingtofixerror.py”,第 35 行,在 cursor.executemany((u'update sampledata SET POS = %s where SRNO =%d'.encode('utf-8'), (x[a],a)) (u'MO-MK25'.encode(' utf-8'))) TypeError:“元组”对象不可调用【问题讨论】:
-
一方面,pyodbc 文档说它使用
?进行参数替换,而不是%s。 -
请对您的问题使用不那么激进的格式,冷静下来,阅读答案,并尝试了解错误的原因。目前,你在盲目猜测,只会让事情变得更糟!
-
最后一个错误正在发生,因为您可能缺少逗号或错误地调用了 executemany。它似乎试图将
(u'update sampledata SET POS = %s where SRNO =%d'.encode('utf-8'), (x[a],a))视为可调用对象并将(u'MO-MK25'.encode('utf-8'))传递给它。这当然不是你想要的。