我有一个CrawlSpider,我设置了一个item pipeline,并且我正在尝试通过MySQLdb进行持久化。我已经搜索了所有的地方,大部分的样例都至少有6个月的历史,都是以相同的方式使用adbapi。当我尝试使用相同的格式时,我会得到以下错误:
AttributeError: 'module' object has no attribute 'DictCursor'
我不知道我在这里做错了什么,但我对Python相当新,而且对scrapy非常新,所以很可能是我忽略了一些简单的东西。
from twisted.enterprise import adbapi
from scrapy import log
import MySQLdb.cursors
class InventoryPipeline(object):
def __init__(self):
self.pool = adbapi.ConnectionPool('MySQLdb',
db='inventory',
user='root',
passwd='',
cursorClass=MySQLdb.cursors.DictCursor,
charset="utf8",
use_unicode=True
)
def process_item(self, item, spider):
query = self.pool.runInteraction(self._insert_record, item)
query.addErrback(self._handle_error)
return item
def _insert_record(self, tx, item):
tx.execute("select * from content where url = %s", (item['url']))
result = tx.fetchone()
if result:
log.msg("url already in database", level=log.INFO)
else:
tx.execute("insert into content (url, title, link_content, main_content, header) values (%s, %s, %s, %s, %s)",
(item['url'], item['title'], item['link_content'], item['main_content'], item['header']))
log.msg("Item stored in db: %s" % item, level=log.INFO)
return item
def _handle_error(self, e):
log.err(e)
import MySQLdb
和import MySQLdb.cursors
会怎么样? - alecxemysqldb
。 - alecxe