1
ioven 2017-10-11 21:19:25 +08:00
[scrapy 爬虫成长日记之将抓取内容写入 mysql 数据库 - 秋楓 - 博客园]( http://www.cnblogs.com/rwxwsblog/p/4572367.html)
|
2
xielemon 2017-10-11 21:57:59 +08:00
哈哈 我最近也在搞这个,一个 tips,不要每次处理 item 就插入,速度很慢,可以做 batch insert
|
5
xielemon 2017-10-12 21:13:08 +08:00
|
6
saximi OP @ioven 感谢,文章中的代码好像适用于 PYTHON2 的环境,我在 PYTHON3 运行时遇到下面几个问题,恳请指点:
1、MySQLdb 包在 WIN7+PYTHON3 的环境下应该改为用 pymysql ? 2、dbpool=adbapi.ConnectionPool('MySQLdb',**dbargs) 这个方法对应的 PYTHON3 的语法应该是什么? 3、cursorclass=MySQLdb.cursors.DictCursor, 这个语句对应的 PYTHON3 的语法应该是什么? 4、conn.execute() 这个方法的 conn 在文中找不到定义的地方,我看文中有 conn.fetchone()这样的方法调用,是否说明 conn 是个游标,但是 adbapi.ConnectionPool 是没有 cursor 属性的,那么游标是如何定义的呢? 5、程序有 INSERT 的操作,但是为何没有 commit()来提交事务,这样不会有问题么? |
7
saximi OP @ioven 在这篇文章中还看到以下的代码,上网搜了搜没找到关于这三个语句用法的详细说明,不知哪里可以找到?
特别是第三条语句的用法猜不出来。 d=self.dbpool.runInteraction(self._do_upinsert,item,spider) d.addErrback(self._handle_error,item,spider) d.addBoth(lambda _:item) |
8
ioven 2017-10-14 10:45:57 +08:00
@saximi
1. MySQLdb 支持 py3 2. 通用语法 3. from MySQLdb.cursors import DictCursor conn 和 addBoth 貌似都是 twisted 维护连接池的用法,连接池会自动提交 |
9
saximi OP @ioven 谢谢。为了能 import MySQLdb,我应该安装什么包呢?
我在网上看到这句话:“ MySQLdb,目前看来,可以视为一个不再继续维护的项目了。另外,针对 python 3.x 的 mysql,另外一个项目,pymysql 导致可以考虑。其是兼容 dbapi 的” 因为我是 PYTHON3.6 的版本,所以是不是应该用 pymysql 更合适呢? 如果确实更建议用 pymysql 的话,文章中这些代码在 pymysql 下应该如何改写呢? dbpool=adbapi.ConnectionPool('MySQLdb',**dbargs) cursorclass=MySQLdb.cursors.DictCursor 另外,d.addBoth(lambda _:item) 这个语句的作用是什么呢? 恳请指点! |
11
sunwei0325 2017-10-15 23:47:04 +08:00
https://github.com/rmax/dirbot-mysql/blob/master/dirbot/pipelines.py
这里有一个异步操作 mysql 的 pipeline 例子 |
12
saximi OP @ioven 博文中的代码,在插入和更新记录时,是每条记录就提交一次事务么? 如果不是,那么在哪里可以设置一次事务包括多少条记录呢?
|