我正在使用 sqlalchemy 1.1 和 scrapy。我目前正在使用管道通过 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
项目.py:
class Filtered_Item(scrapy.Item):
value= scrapy.Field()
value2= scrapy.Field()
如何修改上面的管道以动态创建和插入过滤的项目值,而不是像现在一样对这些值进行硬编码?
实际上有一个软件包可以帮助您解决这个问题。
查看:数据集:懒人数据库
以下是该页面的摘录:
Features
自动模式:
如果写入数据库中不存在的表或列,则会自动创建。
Upserts:
记录会被创建或更新,具体取决于是否可以找到现有版本。简单的查询助手
查询,例如表中的所有行或跨域的所有不同值
列集。
兼容性:
数据集构建在 SQLAlchemy 之上,可与所有主要数据库配合使用,例如 SQLite、PostgreSQL 和 MySQL。
脚本化导出:
可以根据脚本配置导出数据,使过程变得简单且可复制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)