我正在使用scrapy和数据集(https://dataset.readthedocs.io/en/latest/quickstart.html#storing-data),它是sqlalchemy之上的一个层,尝试将数据加载到sqllite表中,作为Sqlalchemy : Dynamically create table from Scrapy item的后续内容。
使用我的数据集包:
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
运行我的蜘蛛后,我看到打印语句在try except块中打印出来,没有错误,但完成后,我会查看表格并查看截图。表中没有数据。我做错了什么?
答案 0 :(得分:2)
您发布的代码对我不起作用:
TypeError: __init__() takes exactly 2 arguments (1 given)
那是因为__init__
方法需要一个未传递的table_name
参数。您需要在管道对象中实现from_crawler
类方法,例如:
@classmethod
def from_crawler(cls, crawler):
return cls(table_name=crawler.spider.name)
这将使用蜘蛛名称作为表名创建管道对象,您当然可以使用任何您想要的名称。
此外,行self.table = db[table_name].table
应替换为self.table = db[table_name]
(https://dataset.readthedocs.io/en/latest/quickstart.html#storing-data)
答案 1 :(得分:1)
可能与Db连接有些问题。除了检查问题外,请尝试使用此代码段。
gauge --parallel -n=4 specs