![](/img/trans.png)
[英]sqlalchemy ModuleNotFoundError: No module named 'MySQLdb'
[英]ModuleNotFoundError: No module named 'MySQLdb'
在完成我的一个 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'
有人可以帮忙解决这个问题吗? 我在 Windows 机器上使用 python37。 我什至尝试下载诸如 mysqlclient,..etc 之类的软件包,但没有成功。
我已经读过 python3 不支持 mysqldb
看起来当您尝试连接到数据库时,默认情况下您正在使用 mysql db 连接到数据库!
您需要通过编辑您的 DATABASE_URI 配置来更改它
但在您需要安装连接器扩展之前:
使用此命令:
pip install mysql-connector-python
根据 此文档,您可以编辑 DATABASE_URI 并更改默认连接器,如下所示:
DATABSE_URI='mysql+mysqlconnector://{user}:{password}@{server}/{database}'.format(user='your_user', password='password', server='localhost', database='dname')
我希望这个能帮上忙...
您可以使用pip
安装mysqlclient
如果使用Python3 ,试试这个:
pip3 install mysqlclient
或在Python2 中
pip install mysqlclient
要安装MySQLdb
,只要您的机器上安装了pip
或pip3
:
pip install mysqlclient
import pymysql
pymysql.install_as_MySQLdb()
我和你有同样的问题。 这是我的解决方案:
原因: python3.X不支持MySQLdb,需要改成pymysql模型
解决方法:更改导入的内容。
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()
你好互联网人,
由于同样的问题,我到达此页面。
但我使用的是 Ubuntu 18.04 和 Python 3.6
Python 片段 - app.py
from flask import Flask, render_template
from flask_mysqldb import MySQL
app = Flask(__name__)
app.config['MYSQL_HOST'] = 'YourHost'
app.config['MYSQL_USER'] = 'YourUserName'
app.config['MYSQL_PASSWORD'] = 'UserPassword'
app.config['MYSQL_DB'] = 'TheDbName'
mysql = MySQL(app)
app.secret_key = 'YourUltimateSuperSecretKey'
@app.route('/')
@app.route('/index')
def index():
cur = mysql.connection.cursor()
cur.execute('SELECT * FROM users')
data = cur.fetchall()
cur.close()
return render_template('index.html', test = data)
if __name__ == "__main__":
app.run(debug=True)
HTML - index.html
<div>
{% for x in test %}
{{ x }}
{% endfor %}
</div>
所以这就是我为解决问题所做的:
首先我安装了缺少的包:
sudo apt 安装 python3-mysqldb
之后,我在环境中使用 pip 安装了这些库:你应该先安装python3-dev、default-libmysqlclient-dev、build-essential然后你就可以安装mysqlclient了。
sudo yum install python3-devel mysql-devel
pip install mysqlclient
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential
pip install mysqlclient
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.