加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

插入sqlite3值时Python TypeError?

发布时间:2020-12-12 18:59:26 所属栏目:百科 来源:网络整理
导读:我一直在学习使用sqlite3和 python.现在,我有一个功能,它会在互联网上查找该词的定义.然后我尝试将该单词存储在一个表中,并将定义存储到另一个表中,该表通过外键链接在一起. 像这样: #! /usr/bin/env pythonimport mechanizefrom BeautifulSoup import Beau
我一直在学习使用sqlite3和 python.现在,我有一个功能,它会在互联网上查找该词的定义.然后我尝试将该单词存储在一个表中,并将定义存储到另一个表中,该表通过外键链接在一起.

像这样:

#! /usr/bin/env python
import mechanize
from BeautifulSoup import BeautifulSoup
import sys
import sqlite3

def dictionary(word):
    br = mechanize.Browser()
    response = br.open('http://www.dictionary.reference.com')
    br.select_form(nr=0)
    br.form['q'] = word 
    br.submit()
    definition = BeautifulSoup(br.response().read())
    trans = definition.findAll('td',{'class':'td3n2'})
    fin = [i.text for i in trans]
    query = {}
    word_count = 1
    def_count = 1
    for i in fin: 
        query[fin.index(i)] = i
    con = sqlite3.connect('vocab.db')
    with con:
        spot = con.cursor()
        spot.execute("SELECT * FROM Words")
        rows = spot.fetchall()
        for row in rows:
            word_count += 1
        spot.execute("INSERT INTO Words VALUES(?,?)",word_count,word)
        spot.execute("SELECT * FROM Definitions")
        rows = spot.fetchall()
        for row in rows:
            def_count += 1
        for q in query:
            spot.execute("INSERT INTO Definitions VALUES(?,?,def_count,q,word_count)
    return query

print dictionary(sys.argv[1])

当我运行它:

./database_trial.py 'pass'

这是错误消息:

Traceback (most recent call last):
  File "./database_trial.py",line 37,in <module>
    print dictionary(sys.argv[1])  
  File "./database_trial.py",line 28,in dictionary
    spot.execute("INSERT INTO Words VALUES(?,word)
TypeError: function takes at most 2 arguments (3 given)

在函数内部我只有两个参数被传递给’Words’表,但消息说有三个?

spot.execute("INSERT INTO Words VALUES(?,word)

我以为我可能会搞乱sys.argv.所以我经历了将该行更改为:

spot.execute("INSERT INTO Words VALUES(?,sys.argv[1])

我仍然得到与错误消息相同的结果?

解决方法

spot.execute("INSERT INTO Words VALUES(?,word)

有三个参数传递给方法spot.execute:SQL字符串,变量word_count和变量字.我怀疑进入数据库的值需要包含在一个元组中以形成一个参数:

spot.execute("INSERT INTO Words VALUES(?,(word_count,word))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读