jzxxzjrowrord
@jzxxzjrowrord (jzxxzjrowrord)

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でデータベースが作れません

解決したいこと

データベースを作りたい

flaskでwebアプリを作りたいのですがエラーがでて困っています
you tubeを参考に簡単なwebアプリを勉強中なのですが同じことをしていますができません
htmlコードを記述してローカルサーバーにて起動はできたのですが、次の段階のデータベースの作成がつまづいています
sqlalchemyをインストールして使っています
動画ではpython対話モードにてfrom hello(パイソンモジュール名) import dbと記述してdb.create_all()を実行するとデータベースファイルが作成されるみたいですがfrom hello import db実行で何もログがでずdb.create_all()でエラーがでます

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

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.

該当するソースコード

hello.py
from flask import Flask
from flask import 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 hello_world():
    return render_template("hello.html")
index.html
html:index.html
{% extends 'base.html' %}
{% block content %}
<h1>todo</h1>
<article>
    <h2>記事1</h2>
    <p>作成日時:2021/9/1</p>
    <p>こちらは記事1です</p>
</article>
<article>
    <h2>記事2</h2>
    <p>作成日時:2021/9/3</p>
    <p>こちらは記事2です</p>
</article>
{% endblock %}
base.html
<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    {% block content %}
    {% endblock %}
</body>

</html>

自分で試したこと

上記エラーコードから調べてみたのですが何が悪くて次どうすべきか全くわかりません

0

2Answer

Working outside of application context. (アプリケーションのコンテキスト外で作業しています)というエラーがありますが、これはdb.create_all()with app.app_context()の中で実行することで回避できます。

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

関連記事 https://qiita.com/Yu_unI1/items/00110442d66a5f11f7b1

2Like

Comments

  1. @jzxxzjrowrord

    Questioner

    @ito_110
    ありがとうございます
    with app.app_context()でできました!

そもそも、psql,mysqlコマンドでログインできているのでしょうか?

サンプルによって異なりますね
db = SQLAlchemy(app)

django と異なりflaskは通常のpythonコードで記述するので?render_template処理は難しいと思います。

pandasか白熊でデータベースをアクセスすると簡単ですよ!

1Like

Comments

  1. @jzxxzjrowrord

    Questioner

    @HalHarada
    コメントありがとうございます
    コマンドwith app.app_context()でできました

Your answer might help someone💌