ModuleNotFoundError:没有名为“MySQLdb”的模块 Amazon MySQL RDS SQLAlchemy

Posted

技术标签:

【中文标题】ModuleNotFoundError:没有名为“MySQLdb”的模块 Amazon MySQL RDS SQLAlchemy【英文标题】:ModuleNotFoundError: No module named 'MySQLdb' Amazon MySQL RDS SQLAlchemy 【发布时间】:2019-01-10 22:01:07 【问题描述】:

我在将 Amazon AWS mysql 与 SQLAlchemy 连接时遇到问题。按照说明,我已经连接上了。

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://<user>:<password>@<host>/<dbname>

但是有一个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ec2-user/venv/lib/python3.7/site-packages/flask_sqlalchemy/__init__.py", line 514, in __get__
    return type.query_class(mapper, session=self.sa.session())
  File "/home/ec2-user/venv/lib/python3.7/site-packages/sqlalchemy/orm/scoping.py", line 74, in __call__
    return self.registry()
  File "/home/ec2-user/venv/lib/python3.7/site-packages/sqlalchemy/util/_collections.py", line 1001, in __call__
    return self.registry.setdefault(key, self.createfunc())
  File "/home/ec2-user/venv/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 2950, in __call__
    return self.class_(**local_kw)
  File "/home/ec2-user/venv/lib/python3.7/site-packages/flask_sqlalchemy/__init__.py", line 143, in __init__
    bind = options.pop('bind', None) or db.engine
  File "/home/ec2-user/venv/lib/python3.7/site-packages/flask_sqlalchemy/__init__.py", line 877, in engine
    return self.get_engine()
  File "/home/ec2-user/venv/lib/python3.7/site-packages/flask_sqlalchemy/__init__.py", line 896, in get_engine
    return connector.get_engine()
  File "/home/ec2-user/venv/lib/python3.7/site-packages/flask_sqlalchemy/__init__.py", line 559, in get_engine
    self._engine = rv = sqlalchemy.create_engine(info, **options)
  File "/home/ec2-user/venv/lib/python3.7/site-packages/sqlalchemy/engine/__init__.py", line 424, in create_engine
    return strategy.create(*args, **kwargs)
  File "/home/ec2-user/venv/lib/python3.7/site-packages/sqlalchemy/engine/strategies.py", line 81, in create
    dbapi = dialect_cls.dbapi(**dbapi_args)
  File "/home/ec2-user/venv/lib/python3.7/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 102, in dbapi
    return __import__('MySQLdb')
ModuleNotFoundError: No module named 'MySQLdb'

我使用的是 Python3.7 版本。即使根据***,我已经安装了pymysql,但仍然面临问题。

感谢您的回复。

【问题讨论】:

【参考方案1】:

如果你使用 PyMySQL 客户端连接 MySQL,你的 SQLAlchemy 连接字符串需要以

开头
 mysql+pymysql://

而不是mysql://

如果您使用mysql:// 连接,那么您将需要安装 MySQLdb 库,如 Traceback 中所示。

【讨论】:

解决了这个问题,但有人会添加一些关于发生了什么的解释吗? (我会问一个问题;但我还不确定问题是什么。)【参考方案2】:

第 1 步 如果要使用 MySQLDB,则需要使用以下命令之一。哪一个取决于您拥有和使用的操作系统和软件。

easy_install mysql-python(混合操作系统)

pip install mysql-python(混合操作系统/python 2)

pip install mysqlclient(混合操作系统/python 3)

apt-get install python-mysqldb(Linux Ubuntu,...)

cd /usr/ports/databases/py-MySQLdb &amp;&amp; make install clean (FreeBSD)

yum install MySQL-python (Linux Fedora, CentOS ...)

对于 Windows,请参阅此答案:Install mysql-python (Windows)

第 2 步:

    创建引擎

engine = create_engine('mysql+mysqldb://...', pool_recycle=3600)

使用create_engine.pool_recycle 选项确保如果连接已在池中存在固定秒数,则该连接将被丢弃并替换为新连接:

    创建连接对象

conn = engine.connect()

    执行 SQL 查询

conn.execute("SELECT * From table;")

【讨论】:

以上问题已解决: import pymysql pymysql.install_as_MySQLdb() 谢谢大家的建议。其他没有什么可改变的 这对我来说失败了python-mysqldb has no installation candidate【参考方案3】:

以上问题已通过以下方式解决:

import pymysql

pymysql.install_as_MySQLdb()

没有什么可以改变的。

【讨论】:

以上是关于ModuleNotFoundError:没有名为“MySQLdb”的模块 Amazon MySQL RDS SQLAlchemy的主要内容,如果未能解决你的问题,请参考以下文章

ModuleNotFoundError:没有名为“dataviz”的模块

ModuleNotFoundError:没有名为“numpy”的模块

错误:ModuleNotFoundError:没有名为“图像”的模块

ModuleNotFoundError:没有名为“knox”的模块

ModuleNotFoundError:没有名为“memoize”的模块

ModuleNotFoundError:没有名为“pssh”的模块