SQLite 绑定错误数量不正确

皮蒂

一点背景 我在 python 2.7 中这样做是因为 Alexa Rank 通过 SeoLib 但我完全愿意更新如果这有助于这个问题或可能解决未来的问题。

现在,该程序对我在预定 csv 中拥有的站点进行排序,如下所示:

site
00rbt.com

我特别收到以下错误:

 File "igorPanda.py", line 84, in <module>
    update_site(site,cur_ip,cur_rank,cur_hash)
  File "igorPanda.py", line 30, in update_site
    (site))
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 9 supplied.

发生此错误的地方是:

def update_site(site,cur_ip,cur_rank,cur_hash):
    conn = sqlite3.connect('/root/Database/Sites.db')
    cursor = conn.cursor()
    with conn:
        cursor.execute("SELECT EXISTS(SELECT * from sites WHERE site = ?)",
                       (site))
        record = cursor.fetchone()
        if record[0] == 1:
            cursor.execute("UPDATE sites SET cur_ip = ?, cur_rank = ?, cur_hash = ? WHERE site = ?",
                       (cur_ip,cur_rank,cur_hash,site))
        else:
            cursor.execute("INSERT into sites values (?,?,?,?,?,?,?,?)",
                       (site,cur_ip,None,cur_rank,None,None,cur_hash,None))

除了导入,我的整个代码是:

#Updates the DB
def update_site(site,cur_ip,cur_rank,cur_hash):
    conn = sqlite3.connect('/root/Database/Sites.db')
    cursor = conn.cursor()
    with conn:
        cursor.execute("SELECT EXISTS(SELECT * from sites WHERE site = ?)",
                       (site))
        record = cursor.fetchone()
        if record[0] == 1:
            cursor.execute("UPDATE sites SET cur_ip = ?, cur_rank = ?, cur_hash = ? WHERE site = ?",
                       (cur_ip,cur_rank,cur_hash,site))
        else:
            cursor.execute("INSERT into sites values (?,?,?,?,?,?,?,?)",
                       (site,cur_ip,None,cur_rank,None,None,cur_hash,None))
#Moves CSV for Historical Savings
bashmove = "mv top.csv /root/Desktop/scripts/results-igor/top-$(date +%m-%d-%Y).csv"
#Sets file with all sites to variable
filename='/root/Desktop/scripts/sorted.csv'
#Creates hash algorithm for later use
hasher = hashlib.sha256()
sess = requests.Session()
x = datetime.datetime.now()
date = x.strftime('%Y-%m-%d')
regex = r"^(?:https?:)?(?:\/\/)?(?:[^@\n]+@)?(?!www\.)?([^:\/\n]+)\w*\.\b(com|org|co|be|de|br|(\w+\b))" #regex to get stripepd website no https://www. or anything afte$

df = pd.DataFrame()
df = df.append(pd.read_csv(filename), ignore_index=True)
ip = "NOT FOUND"
for i in df.index:
    #print(i)
    site = df['site'][i]
    try :
     ip = socket.gethostbyname(site)
     page = requests.get('http://' + df['site'][i], timeout=5)
     hasher.update((page.text).encode('utf-8'))
    except: #ignore errors if the site is bad
        pass
    try :
     alexa_rank = seo.get_alexa('http://{}'.format(site)) #seolib gets the alexa ranking
     #alexa_rank = None
    except:
     pass
    site = site
    cur_ip = ip
    cur_rank = alexa_rank
    cur_hash = hasher.hexdigest()
    update_site(site,cur_ip,cur_rank,cur_hash)  
    rd = call(["/root/Desktop/scripts/./rDNSlookup.sh", site, ip]) #call bash script to get reverse DNS of ip
    wi = call(["/root/Desktop/scripts/./whois.sh", site]) #call bash script to print host info
    with open('/root/Desktop/scripts/IGOR_His/'+ date + 'sites.csv', 'a') as f:
      print >> f, 'site: ',site,', ip: ',ip,', rank: ',alexa_rank, ', hash', cur_hash
shutil.copy("/root/Database/Sites.db", "/var/www/html/sites/Sites.db")

该表包含以下列:

site,cur_ip,prev_ip,cur_rank,prev_rank,play,cur_hash,prev_hash

迈克·斯科蒂

TL;DR:使用 (site,)

详细说明:

cursor.execute 期望第二个参数是可迭代的。

当你的代码说:

cursor.execute("SELECT EXISTS(SELECT * from sites WHERE site = ?)", (site))

Then(site)不是元组 - 您可能打算通过将其包装在().

所以你的意思/想要的是:

cursor.execute("SELECT EXISTS(SELECT * from sites WHERE site = ?)", (site,))

注意额外的,

为避免这种元组混淆,您还可以使用列表:

cursor.execute("SELECT EXISTS(SELECT * from sites WHERE site = ?)", [site])

更详细的问题:

cursor.execute("SELECT EXISTS(SELECT * from sites WHERE site = ?)", (site))

是一样的:

cursor.execute("SELECT EXISTS(SELECT * from sites WHERE site = ?)", site)

与(在您的情况下)相同:

cursor.execute("SELECT EXISTS(SELECT * from sites WHERE site = ?)", "00rbt.com")

该字符串00rbt.com用作可迭代的,并且由于它有 9 个字符,因此您会收到错误消息:

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,并且提供了 9 个。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

“提供的绑定数量不正确” cPython 3.5 SQLite3 VS15

使用python和sqlite更新TABLE时,出现此错误-提供的绑定数不正确

SQLite 请求显示“提供的绑定数量不正确。当前语句使用 0,并且提供了 1 个”

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,并提供了 2

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用1,并且提供了74

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用1,并且提供了74

sqlite3:提供的绑定数量不正确。当前语句使用1个,提供了5个

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用1,并且提供了5

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用6,并且提供了5

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用1个,提供了20个

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用7个,提供了1个

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用1,提供了202

sqlite3 中提供的绑定不正确

Python-sqlite异常“靠近s的错误”-我的sqlite语句不正确吗?

SQLite语法在“ S”附近不正确

SQLite SUM 问题,求和不正确?

Python Sqlite3 executemany中的绑定数不正确

SQLite3通过变量更新ERROR提供的绑定数不正确

我想将具有可变长度的表插入sqlite数据库,但是出现错误提示:提供的绑定数不正确

矩阵下标数量不正确的错误

SQLite关键字“ OR”附近的语法不正确

Peewee和SQLite返回不正确的日期格式

Python:执行时提供的绑定数量不正确

PDO + PHP + SQLITE + PRINT +'ME'=表结果不正确,不是预期的结果

导出到CSV sqlite3 Python后数据显示不正确

从sqlite db文件(Android)转换了不正确的formatted.csv文件

错误格式不正确

装箱不正确?不同数量的计数

VirtualBox提供了不正确的键绑定