背景:项目中用到了 mysqlclient,但是这几天换了 m1 mac,mysqlclient 用不了了,上网搜了下感觉现在继续用 mysqlclient 的解决方案都不太完美,就考虑换成 PyMySQL
问题:如果不改代码的话,有什么方法可以把 mysqlclient 直接替换成 PyMySQL 吗?感觉应该有能实现的方法,但是搜了一圈也没搜到,不知道是关键词不对还是没有办法
![]() | 1 Vegetable 2021-07-29 13:02:17 +08:00 ![]() 完全不改代码应该不太行 至少也要 pymysql.install_as_MySQLdb() |
2 superbai OP @Vegetable #1 感谢回复。看了下这个方法,应该不是我想要的。我想要的是,就把 pymysql 重命名成 mysqldb,这样子代码就不用改了。因为 pymysql 和 mysqldb 看起来 API 几乎是完全相同的 |
![]() | 3 Vegetable 2021-07-29 13:25:41 +08:00 @superbai pymysql.install_as_MySQLdb()之后,代码其他地方 import mysqldb 就等于 import pymysql 。并且接口是兼容的。 $ python manage.py shell ... In [1]: impot MySQLdb In [2]: MySQLdb Out[2]: <module 'pymysql' from '/.../site-packages/pymysql/__init__.py'> |
5 HankLu 2021-07-29 13:50:17 +08:00 还有这种操作?学习了 |
![]() | 7 Vegetable 2021-07-29 14:16:55 +08:00 @wellsc 我没研究过,因为用这个最常见的场景是在 django 项目替换 mysqldb,都是无脑替换的,接口应该是完全兼容的。平时都是用 orm,connecter 的 api 没关注过 |
![]() | 8 fiht 2021-07-29 14:44:36 +08:00 人生苦短,还是不要用 m1 折腾了,楼主快及时止损。 改好 pymysql 之后下一个库还有兼容性问题呢,继续改么? |
![]() | 9 Trim21 2021-07-29 15:04:24 +08:00 via Android ![]() @wellsc python 有几个 pep 规定了 dbapi 的接口,大部分数据库的 driver 函数接口都是按照这个来的。 |
![]() | 10 ChrisFreeMan 2021-07-29 15:23:25 +08:00 我都不知道是 MacOS 的兼容性差还是 Python 生态的兼容性差,我也是 M1 Mac,那个 Pygame 死活装不上去,各种依赖都装了,折腾两天最后还是跑不起来。 |
![]() | 11 felixcode 2021-07-29 15:43:52 +08:00 有些库 x86 都够折腾了,m1 下面更难了。 |
![]() | 12 ericguo 2021-07-29 15:48:30 +08:00 考虑一下 ruby 吧,虽然 Python 的 MOTO 说,there is one and only one way to do things,但是实际上库是一大堆,质量参差不齐,Ruby 虽然允许 many way to do one things,但是真的入手你会发现其实往往选择只有一种,好的写法只有一种。 |
![]() | 13 aladdinding 2021-07-29 16:07:41 +08:00 @ericguo 别个项目就是 python 你让别个重写吗 |
![]() | 14 ericguo 2021-07-29 16:31:00 +08:00 @aladdinding 我也就看上面一堆人都说 python 折腾,感叹一下。。。 |
![]() | 16 linhongye 2021-07-29 17:15:48 +08:00 这个做法太扯了... 数据库操作的代码, 应该没几个文件会涉及, 直接全部改掉也不会太累. 如果你每个地方, 都是直接去操做数据库的话, 这也是个合适的时间、借口, 重构代码... |
![]() | 17 ericguo 2021-07-29 20:19:02 +08:00 @ruanimal Python 初学者的第一门语言,没法比,单 Rails 也不是没人用。https://trends.builtwith.com/framework |
18 yaxe 2021-07-30 09:33:25 +08:00 ![]() 抖个机灵 import mysqlclient as PyMySQL |
19 superbai OP |
20 superbai OP |
21 superbai OP @fiht #8 有一说一,除了这些兼容性问题,其它的还是挺不错的,尤其是电池续航比 intel CPU 的 MacBook pro 要好很多,电脑也终于不烫手了 |
![]() | 22 Vegetable 2021-07-30 16:45:13 +08:00 |
![]() | 25 Trim21 2021-07-31 00:45:58 +08:00 @superbai #23 那你手动写个叫 mysqldb 的包安装到虚拟环境里,然后从 pymysql 里面 import *吧... |
![]() | 26 frostming 2021-08-02 17:58:34 +08:00 ![]() @superbai 接 25L, 大可不必如此麻烦,只用放一个 _patch_mysql.pth 到 site-packages 下面,内容是 import pymysql; pymysql.install_as_MySQLdb() |
27 superbai OP @frostming #26 感谢,又学到了一个知识点;不过我是虚拟环境的话,这样做是不是只能对当前的虚拟环境生效?因为 site-packages 是跟着虚拟环境走的吧 |
31 strict 2021-08-13 15:27:53 +08:00 monkey patch |