[英]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.