Misaku
@Misaku (Misaku suzuki)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

web app 作成 flask について

解決したいこと

このサイトに沿って to do list を作成しています。
https://tech-diary.net/flask-introduction/#index_id1

db.create_all() をREPLにて実行し dbを作成したいが、エラーが発生してしまいます。

環境
macBook pro m1  Monterey
VScode 1.72.0 (Universal)
anaconda

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

>>> db.create_all()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/takuyasuzuki/miniforge3/envs/ds_env/lib/python3.9/site-packages/flask_sqlalchemy/extension.py", line 868, in create_all
    self._call_for_binds(bind_key, "create_all")
  File "/Users/takuyasuzuki/miniforge3/envs/ds_env/lib/python3.9/site-packages/flask_sqlalchemy/extension.py", line 839, in _call_for_binds
    engine = self.engines[key]
  File "/Users/takuyasuzuki/miniforge3/envs/ds_env/lib/python3.9/site-packages/flask_sqlalchemy/extension.py", line 628, in engines
    app = current_app._get_current_object()  # type: ignore[attr-defined]
  File "/Users/takuyasuzuki/miniforge3/envs/ds_env/lib/python3.9/site-packages/werkzeug/local.py", line 513, in _get_current_object
    raise RuntimeError(unbound_message) from None
RuntimeError: Working outside of application context.

This typically means that you attempted to use functionality that needed
the current application. To solve this, set up an application context
with app.app_context(). See the documentation for more information.
>>> 

該当するソースコード

app.py
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy



app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db'
db = SQLAlchemy(app)



class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(30), nullable=False)
    detail = db.Column(db.String(100))
    due = db.Column(db.DateTime, nullable=False)

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == "__main__":
    app.run(debug=True)

自分で試したこと

1.

flask ドキュメントにある

with app.app_context():
        init_db()

を9行目あたり(db = SQLAlchemy(app))の次の行に入れて実行してみました。
app.pyをimportするところでエラーが出てしまいました。

2.

参考サイトにはyoutube動画があり、 SQLAlchemy==1.3.20 にすると
うまくいくと言うコメントがあったので、インストールして実行してみましたが
ダメだったので 1.4.18 に戻しました。

なんだかんだここで足踏み状態になり3日目です、、
どなたかご教授お願いします。
よろしくお願いします。

1

1Answer

ターミナルで

>>> from app import db, app
>>> with app.app_context():
...    db.create_all()

とするとどうなりますか?

2Like

Comments

  1. @Misaku

    Questioner

    ありがとうございます。何回か試したのですがエラーになってしまいます。
    ```
    >>> import app
    >>> from app import db
    >>> with app.app_context():
    ... db.create_all()
    ...
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    AttributeError: module 'app' has no attribute 'app_context'
    ```

    import はできるのですが、その跡が何か間違えているのか、行きません、、
    最初の import app は app.pyの appを import しているわけではない・・・?のですか?

    よろしくお願いします。。
  2. > import app は app.pyの appを import しているわけではない・・・?のですか?

    そういわれてみればそうですね,名前がややこしくて間違えました.すみません.
    from app import app
    が正しそうです.
  3. @Misaku

    Questioner

    ありがとうございます! 無事dbファイルが作成されました!

    やっと次に進めます!!
    またよろしくお願いします!!

Your answer might help someone💌