how - sqlalchemy mysql python example
La inserciĆ³n de la base de datos falla sin error con scrapy (2)
El código que publicaste no está funcionando como está para mí:
TypeError: __init__() takes exactly 2 arguments (1 given)
Eso es porque el método __init__
espera un argumento __init__
que no se está pasando. from_crawler
implementar el método de clase from_crawler
en el objeto pipeline, algo así como:
@classmethod
def from_crawler(cls, crawler):
return cls(table_name=crawler.spider.name)
Eso crearía un objeto de canal usando el nombre de la araña como nombre de la tabla, por supuesto puede usar cualquier nombre que desee.
Además, la línea self.table = db[table_name].table
debe reemplazarse por self.table = db[table_name]
( https://dataset.readthedocs.io/en/latest/quickstart.html#storing-data )
Estoy trabajando con scrapy y conjunto de datos ( https://dataset.readthedocs.io/en/latest/quickstart.html#storing-data ) que es una capa sobre sqlalchemy, tratando de cargar datos en una tabla sqLite como un seguimiento a Sqlalchemy: crea dinámicamente una tabla desde un elemento de Scrapy .
usando el paquete de conjunto de datos que tengo:
class DynamicSQLlitePipeline(object):
def __init__(self,table_name):
db_path = "sqlite:///"+settings.SETTINGS_PATH+"//data.db"
db = dataset.connect(db_path)
self.table = db[table_name].table
def process_item(self, item, spider):
try:
print(''TEST DATASET..'')
self.table.insert(dict(name=''John Doe'', age=46, country=''China''))
print(''INSERTED'')
except IntegrityError:
print(''THIS IS A DUP'')
return item
después de ejecutar mi spider veo las instrucciones de impresión impresas en el bloque try except, sin errores, pero después de completarlo, miro en la tabla y veo la captura de pantalla. No hay datos en la tabla. ¿Qué estoy haciendo mal?
Tal vez algunos problemas con la conexión Db. Pon a prueba tu fragmento, excepto para verificar el problema.
try:
db_path = "sqlite:///"+settings.SETTINGS_PATH+"//data.db"
db = dataset.connect(db_path)
self.table = db[table_name].table
except Exception:
traceback.exec_print()