我正被弄明白这一点逼疯了。我第一次使用Python,并尝试将从twitter收集的数据写入Access 2010数据库。
我使用的命令是:
cursor.execute('''insert into core_data(screen_name,retweet_count) values (?,?,)''', (sname,int(rcount)))
返回的错误消息是:
Traceback (most recent call last): File "C:/Documents and Settings/Administrator/PycharmProjects/clientgauge/tw_scraper.py", line 44, in <module>
cursor.execute('''insert into core_data(screen_name,retweet_count) values (?,?,)''', (sname,int(rcount)))
pyodbc.Error: ('HYC00', '[HYC00] [Microsoft][ODBC Microsoft Access Driver]Optional feature not implemented (106) (SQLBindParameter)')
我已经尝试了将数据传递到数据库的各种排列方式。如果我删除int(rcount)条目,它将发布第一个值sname,而不会出现任何问题。不过,只要我尝试传入多个参数,问题就开始了。
我有一种感觉,我错过了一些真正基本的东西,但我找不到任何与我正在努力做的事情有相似外观的例子,而且我正在努力的事情并不困难。。。用户错误可能是:)
任何帮助都将不胜感激。
干杯,Kev
完整代码为:
from twython import Twython
import pyodbc
ACCESS_DATABASE_FILE = 'C:\data\ClientGauge.accdb'
ODBC_CONN_STR = 'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;' %ACCESS_DATABASE_FILE
cnxn = pyodbc.connect(ODBC_CONN_STR, autocommit=True)
cursor = cnxn.cursor()
APP_KEY = '<removed>'
APP_SECRET = '<removed>'
# Authenticate on twitter using keys above
t = Twython(APP_KEY, APP_SECRET, oauth_version=2)
# Obtain new access token for this session
ACCESS_TOKEN = t.obtain_access_token()
# Authenticate using new access token
t = Twython(APP_KEY, access_token=ACCESS_TOKEN)
# Carry out search
search = t.search(q='<removed>', #**supply whatever query you want here**
count=1, result_type='recent')
tweets = search['statuses']
for tweet in tweets:
sname=tweet['user']['screen_name']
rcount=int(tweet['retweet_count'])
fcount=tweet['favorite_count']
coord=tweet['coordinates']
tzone=tweet['user']['time_zone']
cdate=tweet['created_at']
htags=tweet['entities']['hashtags']
sql = "insert into core_data(screen_name,retweet_count,favourited_count) values (?,?,?)", (str(sname),rcount,fcount)
print(sql)
cursor.execute('''insert into core_data(screen_name,retweet_count) values (?,?)''', (sname,rcount))
cursor.commit()
cnxn.close()
我使用的是MS Access 2010,pyodbc-3.07.win32-py3.3.exe,Python 3.3&PyCharm。
不要评判我的编码能力:)Python对我来说是新的。你可以看到,我最初尝试将INSERT语句设置为字符串(sql),我使用:调用光标
cursor.execute(sql)
不幸的是,这对我也不起作用!如果我把第二个参数替换成一个数字,比如1……它仍然不起作用。令人沮丧。
我在这个驱动程序和pyodbc中遇到了同样的错误,事实证明,将整数转换为浮点值解决了这个问题:
row = [1, 2, "foo"]
row = [float(x) if type(x) is int else x for x in row] #Convert all int items to floats
cursor.execute("insert into table1 (a,b,c) values (?,?,?)",row).commit()
您的参数列表中多了一个逗号,这让您很困惑。以下代码适用于Python 2.7下的我:
import pyodbc
sname = 'Gord'
rcount = 3
cnxn = pyodbc.connect(
'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};' +
'DBQ=C:\Users\Public\Database1.accdb;')
cursor = cnxn.cursor()
sql = "insert into core_data(screen_name,retweet_count) values (?,?)"
params = (sname, int(rcount))
cursor.execute(sql, params)
cursor.commit()
cnxn.close()
编辑:
事实证明,当pyodbc在Python 3.x下运行时与Access ODBC交互时,存在整数参数问题。一个可能的解决方法是尝试下载和安装pypyodbc,然后尝试以下代码(在Python 3.5.2下适用):
import pypyodbc
sname = 'Gord'
rcount = 3
cnxn = pypyodbc.connect(
'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};' +
'DBQ=C:\Users\Public\Database1.accdb;')
cursor = cnxn.cursor()
sql = "insert into core_data(screen_name,retweet_count) values (?,?)"
params = (sname, rcount)
cursor.execute(sql, params)
cursor.commit()
cnxn.close()
此错误通常与ODBC SQL驱动程序版本有关。请参阅此处的问题。
我也遇到了同样的问题,但对我来说,这与驱动程序配置有关。
我在ODBC驱动程序配置中启用了快速选择,我确认这是我出现此错误的原因。
发布这篇文章只是为了防止其他人篡改他们的驱动程序设置,而提出的解决方案并不像我的情况那样是他们想要的。
pyodbc。错误:('HYC00','[HYC00][Oracle][ODBC Oracle Driver]可选功能未实现
由于以下问题,我出现了此错误:
在我的数据帧中已经有两列,比如"X"、"Y"。在我要插入数据库的列列表中,只有"X"
在插入之前,我试图将列名"Y"更改为"X"(使用df.rename(columns={'Y':"X"})),从而要求重复列(2个"X"列)。它没有创建2个"X"列,而是抛出了异常。
修复-->我必须在代码中始终只填充列"X",在的任何位置都不填充"Y"