Scrapy中的数据库连接

时间:2015-08-04 20:19:50

标签: python python-2.7 scrapy

Scrapy文档可以很好地解释如何连接到其中MongoDB Pipeline Example的数据库。

如果我编写另一个也需要数据库访问的管道,我需要创建另一个连接。如果我编写一个Downloader Middleware(用于记录数据库中的请求),那就是另一个。数据库连接相当昂贵,这感觉相当浪费。例如,SQL Alchemy使用连接池。

对于我的问题:是否有更好的方法来建立连接并在扩展,中间件和管道中重复使用它? Scrapy的异步性质和默认的DBAPI2是否存在任何问题(即:使用twisted.enterprise.adbapi会更好/无用吗?)

我已经考虑过类似于以下内容的扩展(假设通过信号进行适当的函数调用):

import MySQLdb

def __init__(self):
    self.db = MySQLdb.connect('...')

def spider_opened(self, spider):
    spider.db = self.db

def spider_closer(self, spider):
    spider.db.close()

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以将共享代码保存在一个单例的任意模块中,然后从任何项目管道,下载器中间件,蜘蛛中间件或扩展中调用该代码。

对于twisted.enterprise.adbapi,如果能够胜任该任务,那肯定会更好,以防止数据库连接阻止爬网。