элементы scrapy в sqlite3: Ошибка привязки параметра 0 - возможно, неподдерживаемый тип - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь сохранить элементы в базе данных 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: Error binding parameter 0 - probably unsupported type.

Вот отображение элементов в консоли перед вставкой:

Что меня удивляет, так это вставка (") перед каждым списком

1 Ответ

0 голосов
/ 27 июля 2018

решение состоит в том, чтобы сделать 'для' в каждом словаре:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...