onaka0_0suita
@onaka0_0suita (m- yuto)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【Flask】MySQLへ接続しTableを作成後、flask runするとModuleNotFoundError: No module named 'flask_sqlalchemy'が出てしまいます。

解決したいこと

Flaskを使用して管理画面を作成したいと考えております。
FlaskからMySQLに接続し、SQLAlchemyを使用して、テーブルの作成を行いました。
下記サイトを参考に実装しました。

https://qiita.com/shirakiya/items/0114d51e9c189658002e

その後、flask runを実行し、Web上で確認した際にInternalServerErrorが出てしまいます。
下記エラーログになります。

発生している問題・エラー

Traceback (most recent call last):
  File "/var/www/skip/app.py", line 2, in <module>
    from skip.database import init_db
ModuleNotFoundError: No module named 'skip'
unable to load app 0 (mountpoint='') (callable not found or import error)

階層構造

app/
 └ run.py
 └ skip/
  └ app.py
  └ database.py
  └ config.py
  └ models/
   └ __ init__.py
   └ models.py

環境

・CentOS7
・Python:3.6
・Flask:2.0.2
・Flask-SQLAlchemy:2.5.1
・SQLAlchemy:1.4.27
・Flask-Migrate:3.1.0

該当するソースコード

run.py
from skip.app import app

if __name__ == '__main__':
    app.run()
skip/app.py
from flask import Flask, render_template
from skip.database import init_db
import skip.models

def create_app():
    app = Flask(__name__)

    app.config.from_object('skip.config.Config')
    init_db(app)

    return app

app = create_app()

@app.route('/')
def home():
    title = "管理画面"
    return render_template('index.html', title=title)
skip/database.py
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

# FlaskがSQLAlchemyを使えるように初期化
db = SQLAlchemy()

def init_db(app):
    db.init_app(app)
    Migrate(app, db)
skip/config.py
import os

class SystemConfig:
    # Flask
    DEBUG = True

    # DBの接続情報を設定
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{user}:{password}@{host}/skip?charset=utf8'.format(**{
        'user': os.getenv('DB_USER', 'root'),
        'password': os.getenv('DB_PASSWORD', 'xxxx_xxxx'),
        'host': os.getenv('DB_HOST', '127.0.0.1'),
    })
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_ECHO = False

Config = SystemConfig
skip/models/models.py
from skip.database import db

class User(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    nickname = db.Column(db.String(30), unique=True, nullable=True)
    email = db.Column(db.String(300), unique=True, nullable=True)
    password = db.Column(db.Text, nullable=True)
    first_name = db.Column(db.String(30), nullable=True)
    last_name = db.Column(db.String(30), nullable=True)
skip/models/__init__.py
from .models import User

__all__ = [
    User,
]

自分で試したこと

エラーログから、app.pyの「from skip.database」という指定が原因なのかと思い、
「from database」という指定に変更したところ、下記エラーログに変わりました。

Traceback (most recent call last):
  File "/var/www/skip/app.py", line 2, in <module>
    from database import init_db
  File "./database.py", line 1, in <module>
    from flask_sqlalchemy import SQLAlchemy
ModuleNotFoundError: No module named 'flask_sqlalchemy'
unable to load app 0 (mountpoint='') (callable not found or import error)

ただ、flask_sqlalchemyはpipにてインストール出来ており、何が原因なのか分からない状況です。
flask_sqlalchemyが現在動いているPythonではなく別のPythonにインストールされているのかと思い、現在動いているPythonのフルパスを調べたところ、「/usr/bin/python3」でした。
そこで、下記を実行してみたのですが、エラー解消とはなりませんでした。
こちらはコードに原因があるのでしょうか?それとも環境に原因があるのでしょうか?
お分かりの方がいらっしゃいましたらご教授頂けますと幸いです。

/aaa/bbb/ccc/python -m pip install Flask-SQLAlchemy

その他に必要な情報がありましたら提示いたします。
よろしくお願いいたします。

0

No Answers yet.

Your answer might help someone💌