Где находится путь к файлу модуля MySQLdb? - PullRequest
0 голосов
/ 29 октября 2018
In [29]: import MySQLdb
In [31]:  MySQLdb
Out[31]: <module 'pymysql' from 'G:\\QGB\\Anaconda3\\lib\\site-packages\\pymysql\\__init__.py'>

Почему MySQLdb не существует и почему я могу его импортировать?

Интересно, почему в sys.path нет файла Python "MySQLdb" или dir. Как мне импортировать «MySQLdb» в Python?

в Django VERSION = (2, 1, 1, 'final', 0),
\ Lib \ site-packages \ django \ db \ backends \ mysql \ base.py строка 15.

 import MySQLdb as Database

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

A 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
0 голосов
/ 30 октября 2018

причина:

в вашем проекте где-то

import pymysql
pymysql.install_as_MySQLdb()
...