Sqlalchemy:从Scrapy项目动态创建表格

use*_*629 5 python sqlalchemy scrapy

我正在使用sqlalchemy 1.1和scrapy.我目前正在使用aa管道通过sqlalchemy将提取的数据存储在sqllite表中.我想动态创建一个表来容纳被抓取的项目.

我的静态管道元素如下所示:

class SQLlitePipeline(object):

    def __init__(self):
        db_path = "sqlite:///"+settings.SETTINGS_PATH+"\\data.db"
        _engine = create_engine(db_path)
        _connection = _engine.connect()
        _metadata = MetaData()
        _stack_items = Table(table_name, _metadata,
                             Column("id", Integer, primary_key=True),
                             Column("value", Text))
                             Column("value2", Text))
        _metadata.create_all(_engine)
        self.connection = _connection
        self.stack_items = _stack_items

    def process_item(self, item, spider):

            try:
                ins_query = self.stack_items.insert().values(
                value=item['value'],
                value2=item['value2'],)
                self.connection.execute(ins_query)
            except IntegrityError:
                    print('THIS IS A DUP')
            return item
Run Code Online (Sandbox Code Playgroud)

items.py:

class Filtered_Item(scrapy.Item):

    value= scrapy.Field()
    value2= scrapy.Field()
Run Code Online (Sandbox Code Playgroud)

如何修改上面的管道来动态创建和插入过滤项的值,而不是像现在这样硬编码?

Ale*_*ias 6

实际上有一个包可以帮助你解决这个问题.

退房:数据集:懒人的数据库

以下是该页面的摘录:

特征

自动架构:

如果写入了数据库中不存在的表或列,则会自动创建该表或列.

Upserts:

记录是创建还是更新,具体取决于是否可以找到现有版本.查询简单查询的助手,例如表中的所有行或一组列中的所有不同值.

兼容性:

数据集构建于SQLAlchemy之上,适用于所有主要数据库,如SQLite,PostgreSQL和MySQL.

脚本出口:

可以基于脚本配置导出数据,从而使过程变得简单且可复制.