Ich versuche, die Ergebnisse von mehr als einer Spinne in separaten Tabellen in MySQL zu speichern

Hier ist meine pipelines.py. Ich habe zwei Spinnen, eine bristol.py und eine bath.py. Wenn ich 'scrapy crawl bristol' starte, werden die Ergebnisse automatisch zu meiner MySQL-Datenbank mit dem Namen 'Bristol' hinzugefügt. Ich möchte 'srapy crawl bath' ausführen und die Ergebnisse in der MySQL-Datenbank unter dem Tabellennamen 'Bath' speichern können. Ich habe versucht, genau dieselbe Codezeile für die Tabelle "Bristol" hinzuzufügen, erhalte jedoch eine Fehlermeldung. Dies ist der Code, den ich versucht habe, direkt unter das erste self.cursor.execute zu schreiben

self.cursor.execute("""INSERT INTO Bath(BathCountry, BathQualification) VALUES ('{0}', '{1}')""".format(item['BathCountry'], "".join([s.encode('utf8') for s in item['BathQualification']])))

Wenn ich das versuche, erhalte ich eine Fehlermeldung. Gibt es eine Möglichkeit, dies zu tun? Das ist der Fehler

 exceptions.KeyError: 'BathCountry'

Vielen Dank für Ihre Hilfe im Voraus.

import sys
import MySQLdb
import MySQLdb.cursors
import hashlib
from scrapy.exceptions import DropItem
from scrapy.http import Request

class TestPipeline(object):

    def __init__(self):
        self.conn = MySQLdb.connect(
            user='user',
            passwd='password',
            db='db',
            host='host',
            charset='utf8',
            use_unicode=True
            )
        self.cursor = self.conn.cursor()

    def process_item(self, item, spider):
        try:
            self.cursor.execute("""INSERT INTO Bristol(BristolCountry, BristolQualification) VALUES ('{0}', '{1}')""".format(item['BristolCountry'], "".join([s.encode('utf8') for s in item['BristolQualification']])))
            self.conn.commit()
            return item

        except MySQLdb.Error as e:
            print "Error %d: %s" % (e.args[0], e.args[1])

Antworten auf die Frage(0)

Ihre Antwort auf die Frage