背景:项目中用到了 mysqlclient,但是这几天换了 m1 mac,mysqlclient 用不了了,上网搜了下感觉现在继续用 mysqlclient 的解决方案都不太完美,就考虑换成 PyMySQL
问题:如果不改代码的话,有什么方法可以把 mysqlclient 直接替换成 PyMySQL 吗?感觉应该有能实现的方法,但是搜了一圈也没搜到,不知道是关键词不对还是没有办法😂
1
Vegetable 2021-07-29 13:02:17 +08:00 1
完全不改代码应该不太行
至少也要 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]: import 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 1
@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 1
抖个机灵
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 1
@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
|