ModuleNotFoundError: нет модуля с именем «MySQLdb» - PullRequest
0 голосов
/ 27 октября 2018

После завершения одного из моих проектов Flask я загрузил его на github, как и все остальные. через 2-3 месяца я загрузил весь githube-репозиторий на другую машину, чтобы запустить его. Однако приложение не работает, поскольку пакеты не найдены, и выдается следующее сообщение

ModuleNotFoundError: нет модуля с именем Flask

Итак, я скачал все пакеты, начиная с Flask, SQLalchemy и т. Д.! но я застрял с MySQLdb:

(MYAPPENV) C:\Users\hp\myapp>python run.py
Traceback (most recent call last):
  File "run.py", line 1, in <module>
    from app import app
  File "C:\Users\hp\myapp\app\__init__.py", line 4, in <module>
    from instance.config import engine
  File "C:\Users\hp\myapp\instance\config.py", line 52, in <module>
    engine = create_engine("mysql://root:root@localhost/MYAPPDB")
  File "C:\Users\hp\AppData\Local\Programs\Python\Python37-32\lib\site-packages\sqlalchemy\engine\__init__.py", line 425, in create_engine
return strategy.create(*args, **kwargs)
  File "C:\Users\hp\AppData\Local\Programs\Python\Python37-32\lib\site-packages\sqlalchemy\engine\strategies.py", line 81, in create
dbapi = dialect_cls.dbapi(**dbapi_args)
  File "C:\Users\hp\AppData\Local\Programs\Python\Python37-32\lib\site-packages\sqlalchemy\dialects\mysql\mysqldb.py", line 102, in dbapi
    return __import__('MySQLdb')
ModuleNotFoundError: No module named 'MySQLdb'

Может ли кто-нибудь помочь с этой проблемой? Я использую python37 на машине Windows. Я даже пытался загрузить такие пакеты, как mysqlclient и т. Д., Но это не сработало.

Ответы [ 4 ]

0 голосов
/ 25 апреля 2019

У меня та же проблема, что и у вас. Мое решение, подобное этому, хотелось бы, чтобы оно вам помогло:

1. причина: python3.X не поддерживает MySQLdb, перейдите на модель pymysql 2.solution: изменить содержание импорта.

1):

replace all MySQLdb with pymysql

2):

def reconnect(self):
    """Closes the existing database connection and re-opens it."""
    self.close()
    self._db = pymysql.connect(**self._db_args)# MySQLdb.connect(**self._db_args)
    self._db.autocommit(True)

3)

if pymysql is not None:
    # Fix the access conversions to properly recognize unicode/binary
    FIELD_TYPE = pymysql.connections.FIELD_TYPE # MySQLdb.constants.FIELD_TYPE
    FLAG = pymysql.constants.FLAG# MySQLdb.constants.FLAG
    CONVERSIONS = copy.copy (pymysql.converters.conversions)# (MySQLdb.converters.conversions)

    field_types = [FIELD_TYPE.BLOB, FIELD_TYPE.STRING, FIELD_TYPE.VAR_STRING]
    if 'VARCHAR' in vars(FIELD_TYPE):
        field_types.append(FIELD_TYPE.VARCHAR)

    for field_type in field_types:
        # CONVERSIONS[field_type] = [(FLAG.BINARY, str)] + CONVERSIONS[field_type]
        CONVERSIONS[field_type] = [(FLAG.BINARY, str)].append(CONVERSIONS[field_type])

    # Alias some common MySQL exceptions
    IntegrityError = pymysql.IntegrityError# MySQLdb.IntegrityError
    OperationalError = pymysql.OperationalError# MySQLdb.OperationalError

4):

def __init__(self, host, database, user=None, password=None,
                 max_idle_time=7 * 3600, connect_timeout=10,# 设置连接超时时间,时间是秒
                 time_zone="+0:00", charset = "utf8", sql_mode="TRADITIONAL"):

5):

def query(self, query, *parameters, **kwparameters):
    """Returns a row list for the given query and parameters."""
    cursor = self._cursor()
    try:
        self._execute(cursor, query, parameters, kwparameters)
        column_names = [d[0] for d in cursor.description]
        return [Row(itertools.zip_longest(column_names, row)) for row in cursor]
    finally:
        cursor.close()
0 голосов
/ 29 декабря 2018

Вы можете установить mysqlclient с помощью pip

попробуйте это:

pip3 install mysqlclient

или

pip install mysqlclient in python2

0 голосов
/ 04 января 2019

Я прочитал, что mysqldb не поддерживается python3

И, похоже, когда вы пытаетесь подключиться к вашей базе данных, вы используете mysql db для подключения к базе данных по умолчанию!

вам нужно изменить его, отредактировав свою конфигурацию DATABASE_URI

Но перед тем, как установить наружный разъем:

с помощью этой команды:

pip install mysql-connector-python

И в соответствии с этой документацией вы можете отредактировать свой DATABSE_URI и изменить соединитель по умолчанию следующим образом:

DATABSE_URI='mysql+mysqlconnector://{user}:{password}@{server}/{database}'.format(user='your_user', password='password', server='localhost', database='dname')

Надеюсь, это поможет ....

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

Чтобы установить MySQLdb, при условии, что на вашем компьютере установлено pip или pip3:

pip install mysqlclient
...