【问题标题】:items scrapy in sqlite3 : Error binding parameter 0 - probably unsupported typesqlite3中的项目scrapy:错误绑定参数0-可能不受支持的类型
【发布时间】:2018-06-25 10:00:45
【问题描述】:

我正在尝试将项目存储在 sqlite3 数据库中。 我已经生成了所有项目..

这是我管道中的存储代码:

con = None  # db connection
class StoreInDBPipeline(object):

# constructeur
def __init__(self):
    self.createBD()
    self.dropFactureTable()
    self.createFactureTable()

# implémenter dans la classe Pipeline et renvoyer une exception dict, Item ou DropItem
def process_item(self, item, spider):
    self.storeInDb(item)
    return item

# insertion
def storeInDb(self, item):
    self.cur.execute("INSERT INTO Facture(numDocument, dateFacture, datePaiement, typeFacture, montantTTC, lienFacture ) VALUES( ?,?,?,?,?,?)",
                     (item['numDocument'], item['dateFacture'], item['datePaiement'], item['typeFacture'], item['montantTTC'], item['lienFacture']))
    log.msg("Item stored in db", level=log.DEBUG)
    self.con.commit()

# creer la BD / cursor
def createBD(self):
    self.con = lite.connect('BD_Facture.db')
    self.cur = self.con.cursor()

# contrepartie du constructeur (destructeur) fermer la connexion à la BD
def __del__(self):
    self.closeDB()

# creer la table
def createFactureTable(self):
    self.cur.execute('CREATE TABLE IF NOT EXISTS Facture(numDocument INTEGER PRIMARY KEY NOT NULL, dateFacture TEXT, datePaiement TEXT,typeFacture TEXT, montantTTC TEXT , lienFacture TEXT)')

# supprime la table dans la BD
def dropFactureTable(self):
    self.cur.execute("DROP TABLE IF EXISTS Facture")

# fermer la connexion à la BD
def closeDB(self):
    self.con.close()

但是在存储过程中,我得到了这个错误:

sqlite3.InterfaceError:错误绑定参数 0 - 可能 不支持的类型。

【问题讨论】:

  • 在不知道您如何称呼它或item 的值是什么的情况下,很难说问题可能是什么。尝试打印值的repr 以查看您传递给INSERT 的内容:print([repr(item[x]) for x in ["numDocument", "dateFacture", "datePaiment", "typeFacture", "montantTTC", "lienFacture"]])
  • 屏幕截图显示了一个包含字符串列表的字符串表示形式的列表,因此看起来您没有向它传递单个字符串。你应该仔细检查对storeInDb 的调用,看看你传递了什么。

标签: python sqlite scrapy


【解决方案1】:

解决方案是在每个字典中创建一个“for”:

for num,dateF,dateP,type,mont in zip(item['numDocument'],item['dateFacture'],item['datePaiement'],item['typeFacture'],item['montantTTC']):
        self.cur.execute("INSERT INTO Facture(numDocument, dateFacture, datePaiement, typeFacture, montantTTC) VALUES( ?,?,?,?,?)", (num,dateF,dateP,type,mont))

self.con.commit()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    相关资源
    最近更新 更多