python3 项目不改代码前提下,有什么办法可以把引用的 mysqlclient 直接替换为 PyMySQL?

2021-07-29 12:31:34 +08:00
 superbai

背景:项目中用到了 mysqlclient,但是这几天换了 m1 mac,mysqlclient 用不了了,上网搜了下感觉现在继续用 mysqlclient 的解决方案都不太完美,就考虑换成 PyMySQL

问题:如果不改代码的话,有什么方法可以把 mysqlclient 直接替换成 PyMySQL 吗?感觉应该有能实现的方法,但是搜了一圈也没搜到,不知道是关键词不对还是没有办法😂

2972 次点击
所在节点    Python
31 条回复
Vegetable
2021-07-29 13:02:17 +08:00
完全不改代码应该不太行
至少也要
pymysql.install_as_MySQLdb()
superbai
2021-07-29 13:22:12 +08:00
@Vegetable #1 感谢回复。看了下这个方法,应该不是我想要的。我想要的是,就把 pymysql 重命名成 mysqldb,这样子代码就不用改了。因为 pymysql 和 mysqldb 看起来 API 几乎是完全相同的
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'>
Trim21
2021-07-29 13:40:47 +08:00
@superbai #2 这句话就是这个作用,只需要在程序的入口加这么一句话,其他的 mysqldb 都不用改
HankLu
2021-07-29 13:50:17 +08:00
还有这种操作?学习了
wellsc
2021-07-29 13:56:58 +08:00
@Vegetable 函数接口不一致会出现问题吧
Vegetable
2021-07-29 14:16:55 +08:00
@wellsc 我没研究过,因为用这个最常见的场景是在 django 项目替换 mysqldb,都是无脑替换的,接口应该是完全兼容的。平时都是用 orm,connecter 的 api 没关注过
fiht
2021-07-29 14:44:36 +08:00
人生苦短,还是不要用 m1 折腾了,楼主快及时止损。
改好 pymysql 之后下一个库还有兼容性问题呢,继续改么?
Trim21
2021-07-29 15:04:24 +08:00
@wellsc python 有几个 pep 规定了 dbapi 的接口,大部分数据库的 driver 函数接口都是按照这个来的。
ChrisFreeMan
2021-07-29 15:23:25 +08:00
我都不知道是 MacOS 的兼容性差还是 Python 生态的兼容性差,我也是 M1 Mac,那个 Pygame 死活装不上去,各种依赖都装了,折腾两天最后还是跑不起来。
felixcode
2021-07-29 15:43:52 +08:00
有些库 x86 都够折腾了,m1 下面更难了。
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,但是真的入手你会发现其实往往选择只有一种,好的写法只有一种。
aladdinding
2021-07-29 16:07:41 +08:00
@ericguo 别个项目就是 python 你让别个重写吗
ericguo
2021-07-29 16:31:00 +08:00
@aladdinding 我也就看上面一堆人都说 python 折腾,感叹一下。。。
ruanimal
2021-07-29 17:12:46 +08:00
@ericguo 没人用的语言自然没人说折腾
linhongye
2021-07-29 17:15:48 +08:00
这个做法太扯了...
数据库操作的代码, 应该没几个文件会涉及, 直接全部改掉也不会太累.
如果你每个地方, 都是直接去操做数据库的话, 这也是个合适的时间、借口, 重构代码...
ericguo
2021-07-29 20:19:02 +08:00
@ruanimal Python 初学者的第一门语言,没法比,单 Rails 也不是没人用。https://trends.builtwith.com/framework
yaxe
2021-07-30 09:33:25 +08:00
抖个机灵
import mysqlclient as PyMySQL
superbai
2021-07-30 16:39:03 +08:00
@Vegetable #3
@Trim21 #4 抱歉有其他事情耽误了,现在才回复。因为是引用的包里面用到了 MySQLdb,所以我没有办法直接改对应的文件添加这句话。请问有方法可以在自己的文件里加上这句话,然后对引用的包生效吗?
superbai
2021-07-30 16:41:00 +08:00
@HankLu #5
@ChrisFreeMan #10
毕竟底层架构都不一样了,我感觉有调用在其它平台上编译产物的代码,理论上都有可能会有问题.....

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

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

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

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

© 2021 V2EX