首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“可选特性未实现(106) (SQLBindParameter)”与pyodbc的错误

“可选特性未实现(106) (SQLBindParameter)”与pyodbc的错误
EN

Stack Overflow用户
提问于 2013-11-27 10:39:29
回答 5查看 14.8K关注 0票数 4

我被逼疯了想弄清楚这件事。我第一次使用Python,并试图将从twitter收集的数据写入Access 2010数据库。

我使用的命令是:

代码语言:javascript
复制
cursor.execute('''insert into core_data(screen_name,retweet_count) values (?,?,)''', (sname,int(rcount)))

正在返回的错误消息是:

代码语言:javascript
复制
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。不过,只要我尝试输入多个参数,问题就会开始。

我有一种感觉,我遗漏了一些非常基本的东西,但我找不到任何类似于我试图做的事情的例子,而且我尝试的可能不是difficult...user错误:)

任何帮助都将不胜感激。

干杯,凯夫

完整的代码是:

代码语言:javascript
复制
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 2010,pyodbc-3.0.7.win32-py3.exe,Python3.3& PyCharm。

不要评判我的编码能力:) Python对我来说是新的。您将可以看到,我已经尝试将INSERT语句设置为字符串(sql),并使用以下方法调用游标:

代码语言:javascript
复制
cursor.execute(sql)

不幸的是,这对我也没用!如果我用像1...it这样的数字替换第二个参数,那么仍然不能工作。令人沮丧。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-11-27 11:04:48

您在参数列表中有一个额外的逗号,这使您很不方便。以下代码在Python2.7下适用于我:

代码语言:javascript
复制
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在Python3.x下运行时,当pyodbc与Access交互时,就会发现有一个带有整数参数的报告问题。一个可能的解决办法是尝试下载和安装pypyodbc,然后尝试这段代码(在Python3.5.2下适用于我):

代码语言:javascript
复制
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()
票数 3
EN

Stack Overflow用户

发布于 2014-04-03 08:48:40

对于这个驱动程序和pyodbc,我也有同样的错误,结果是将整数转换成浮点数解决了这个问题:

代码语言:javascript
复制
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()
票数 9
EN

Stack Overflow用户

发布于 2021-10-07 10:57:20

此错误通常与ODBC SQL驱动程序版本相关联。这里见问题

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20240130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档