Python sqlite3中的项目不完整:绑定参数0时出错-可能是不支持的类型
我正在尝试将这些项存储在sqlite3数据库中。 我已经生成了所有项目 以下是我在管道中的存储代码:Python sqlite3中的项目不完整:绑定参数0时出错-可能是不支持的类型,python,sqlite,scrapy,Python,Sqlite,Scrapy,我正在尝试将这些项存储在sqlite3数据库中。 我已经生成了所有项目 以下是我在管道中的存储代码: con = None # db connection class StoreInDBPipeline(object): # constructeur def __init__(self): self.createBD() self.dropFactureTable() self.createFactureTable() # implémenter dans la c
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时出错-可能是
不支持的类型
解决方案是在每本词典中加一个“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()
如果不知道如何称呼它或
项的值是什么,就很难说问题出在哪里。尝试打印值的repr
,查看传递给INSERT
:在[“numDocument”、“dateFacture”、“datepaement”、“typeFacture”、“montanttc”、“lienFacture”]]中打印([repr(项[x]))
屏幕截图显示了一个包含字符串列表的字符串表示的列表,所以看起来你没有传递一个字符串。您应该仔细检查对storeInDb
的调用,以查看传递的内容。