In [29]: import MySQLdb
In [31]: MySQLdb
Out[31]: <module 'pymysql' from 'G:\QGB\Anaconda3\lib\site-packages\pymysql\__init__.py'>
为什么MySQLdb不存在,为什么我可以导入它?
我想知道为什么在sys.path中没有"MySQLdb"python文件或目录。我应该如何在python中导入"MySQLdb"?
在Django VERSION=(2,1,1,'final',0(中,
\Lib\site-packages\Django\db\backends\mysql\base.py第15行。
import MySQLdb as Database
MySQLdb
导入可能来自不同的包(与pip install mysqlclient
一起安装(。
分发版pymysql
旨在作为原始项目的替代品,但出于礼貌,它们没有采用相同的导入名称。相反,它们提供了一个方便的函数,在sys.modules
中使用相同的名称。这样,import MySQLdb
将不会再次尝试遍历sys.path
,而是重新使用已经加载的pymysql
模块:
>>> import pymysql
>>> pymysql.install_as_MySQLdb??
Signature: pymysql.install_as_MySQLdb()
Source:
def install_as_MySQLdb():
"""
After this function is called, any application that imports MySQLdb or
_mysql will unwittingly actually use pymysql.
"""
sys.modules["MySQLdb"] = sys.modules["_mysql"] = sys.modules["pymysql"]
File: ~/.venv/lib/python3.7/site-packages/pymysql/__init__.py
Type: function
原因是:
在你的项目中的某个地方
import pymysql
pymysql.install_as_MySQLdb()