簡體   English   中英

ModuleNotFoundError: 沒有名為“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 ,只要您的機器上安裝了pippip3

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 安裝了這些庫:

pip 安裝 Flask-MySQLdb mysql-connector-python

它奏效了:)

你應該先安裝python3-dev、default-libmysqlclient-dev、build-essential然后你就可以安裝mysqlclient了。

對於紅帽

sudo yum install python3-devel mysql-devel
pip install mysqlclient

對於 Debian

sudo apt-get install python3-dev default-libmysqlclient-dev build-essential
pip install mysqlclient

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM