请教关于 PYTHON3.6 下使用 MYSQL 数据库的问题

2017-10-16 21:51:43 +08:00
 saximi
刚开始学习在 WIN7+PYTHON3.6+MYSQL 数据库的环境下编写爬虫,研究了网上的一个用 MySQLdb 模块和 MYSQL 的例子: http://www.cnblogs.com/rwxwsblog/p/4572367.html 

将文中代码在 WIN7+PYTHON3.6 环境下运行时却遇到了问题: 

1、执行 import MySQLdb 时报模块不存在的错,在 pypi 网站上的 MySQL-python 提示只适用于 PYTHON2.7,那么应该安装什么包呢? 

2、在网上看到这句话:“ MySQLdb,目前看来,可以视为一个不再继续维护的项目了。另外,针对 python 3.x 的 mysql,另外一个项目,pymysql 导致可以考虑。其是兼容 dbapi 的” 所以,是否 MySQLdb 包在 WIN7+PYTHON3.6 的环境下应该改为用 pymysql 更合适?  

3、若改用 pymysql,dbpool=adbapi.ConnectionPool('MySQLdb',**dbargs) 这个语句在 PYTHON3.6 下要实现相同功能对应的写法应该是什么? 
 
4、若改用 pymysql,cursorclass=MySQLdb.cursors.DictCursor, 这个语句对应的 PYTHON3.6 下的写法应该是什么?  

5、如果还是用 MySQLdb 模块,游标如何声明? 我发现下面这两条语句的写法是错误的,提示 dbpool 没有 cursor 属性。 
   dbpool=adbapi.ConnectionPool('MySQLdb',**dbargs) 
   cur=dbpool.cursor()  #报错,提示 dbpool 没有 cursor 属性 

恳请大家指点,万分感谢!

6093 次点击
所在节点    Python
26 条回复
takanasi
2017-10-16 21:57:01 +08:00
SQLAlchemy
saximi
2017-10-16 22:23:44 +08:00
@takanasi 谢谢,但是 SQLAlchemy 是另外一个框架,和我问的问题没有直接关系吧?
infun
2017-10-16 22:25:44 +08:00
pymysql
herozem
2017-10-16 22:43:13 +08:00
PyMySQL
sunwei0325
2017-10-16 22:47:12 +08:00
adbapi 是 twisted 包的异步 api
cxyfreedom
2017-10-16 22:51:51 +08:00
用 PyMySQL 啊,写法基本没变
saximi
2017-10-16 23:00:31 +08:00
@infun
@herozem
@cxyfreedom 我试过 PYMYSQL,但是有些问题:

dbpool=adbapi.ConnectionPool('MySQLdb',**dbargs) 这个语句中的'MySQLdb'要改成什么?
cursorclass=MySQLdb.cursors.DictCursor 这个语句中的 MySQLdb 又要改成什么?
saximi
2017-10-16 23:01:42 +08:00
@sunwei0325 请问哪里有关于 adbapi 的详细说明呢,至少是关于 ConnectionPool()方法的说明也行。
另外,用这个 api 的话,事务是自动提交的吧,多少条记录提交一次?在哪里可以设置每次提交多少条记录呢?
ksupertu
2017-10-16 23:06:53 +08:00
缺 mysql 的客户端库
billlee
2017-10-16 23:10:16 +08:00
saximi
2017-10-16 23:27:44 +08:00
@billlee
@ksupertu 谢谢,请问装了这个客户端库后,是用 pymysql 模块而不是 MySQLdb 对吧?
billlee
2017-10-16 23:28:52 +08:00
@saximi #11 如果用 mysqlclient, 还是 import MySQLdb.
cxyfreedom
2017-10-16 23:39:55 +08:00
In [1]: import pymysql

In [2]: from twisted.enterprise import adbapi

In [3]: config = {
...: "host": "127.0.0.1",
...: "db": "mysql",
...: "user": "root",
...: "passwd": "",
...: "cursorclass": pymysql.cursors.DictCursor,
...: }

In [4]: pymysql.install_as_MySQLdb()

In [5]: dbpool = adbapi.ConnectionPool('MySQLdb', **config)

@saximi
lxy
2017-10-16 23:48:37 +08:00
多看文档,dbmodule 只要符合 PEP 249 也就是 DB-API 2.0 都支持。
http://twistedmatrix.com/documents/current/core/howto/rdbms.html
cursorclass 示例里就有。
https://github.com/PyMySQL/PyMySQL
saximi
2017-10-16 23:50:44 +08:00
@cxyfreedom 非常感谢! 那么游标怎么声明,这么写不对吧 cur=dbpool.cursor()
saximi
2017-10-16 23:54:12 +08:00
@lxy 非常感谢,我先去看看
cxyfreedom
2017-10-16 23:55:23 +08:00
@saximi 没有直接游标,用 runInteraction 这一类构造函数来传递参数里面,效果等同。具体的你要去看文档
saximi
2017-10-17 00:05:49 +08:00
@cxyfreedom 哪里有比较好的关于这个的在线或离线教程呢?谢谢
cxyfreedom
2017-10-17 00:30:11 +08:00
@saximi
临时写的例子
http://7xrk4u.com1.z0.glb.clouddn.com/demo.png

教程的话各种 blog 应该能够看懂吧
janxin
2017-10-17 08:48:57 +08:00
用 mysqlclient,这是 python3 port 的 MySQLdb

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/398140

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX