我有一个相当标准的Scrapy项目,它的目录结构如下
my_project
scrapy.cfg
my_project
__init__.py
items.py
itemsloaders.py
middlewares.py
MyStatsCollector.py
pipelines.py
settings.py
spiders
__init__.py
spider1.py
spider2.py
spider3.py
现在,我的数据库连接放置在
my_project/pipelines.py
:
import psycopg2
class SaveToPostgresPipeline:
def __init__(self):
hostname = ''
username = ''
password = ''
database = ''
蜘蛛的工作方式是抓取数据,将其发送到管道,然后将其保存到数据库中。
我现在需要从蜘蛛(
spider1.py
,spider2.py
,spider3.py
)和MyStatsCollector.py
中的数据库中获取一些数据。
我应该在项目中的哪里设置数据库连接,所以理想情况下我只初始化一次数据库连接,然后在蜘蛛、管道或 MyStatsCollector.py 中使用它。
现在,我唯一的想法是在每个文件中初始化数据库连接,这看起来不太优雅。处理这个问题的最佳方法是什么?
如果您在蜘蛛中执行此操作并将其分配给蜘蛛属性,您将能够在蜘蛛中(显然)以及获取蜘蛛实例的所有组件(包括管道和统计收集器)中访问它。