質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

ウェブアプリケーション

ウェブアプリケーションとは、ウェブ上でアクセスされるアプリケーションのことを呼びます。この場合におけるウェブとは、インターネットやイントラネット上を意味します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2180閲覧

flask db init ができません。

una_o0

総合スコア1

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

ウェブアプリケーション

ウェブアプリケーションとは、ウェブ上でアクセスされるアプリケーションのことを呼びます。この場合におけるウェブとは、インターネットやイントラネット上を意味します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/08/06 12:42

エラーについて

Flaskのデータベースを初期化しようとvscodeのターミナルで
flask db init
というコマンドを実行したところ、

AttributeError: '_FakeStack' object has no attribute '__ident_func__'

というエラーメッセージが表示されてしまいます。

ソースコードはこんな感じです。
app.py

from flask import Flask # Flaskのインスタンスを生成 app = Flask(__name__) # 設定ファイルを読み込む app.config.from_pyfile('settings.py') # SQLAlchemyのインスタンスを生成 from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() # SQLAlchemyオブジェクトにFlaskオブジェクトを登録する db.init_app(app) # Migrateオブジェクトを生成して # FlaskオブジェクトとSQLAlchemydbを登録する from flask_migrate import Migrate Migrate(app, db) """ トップページのルーティング """ from flask import render_template @app.route('/') def index(): # index.htmlをレンダリングして返す return render_template('index.html')

試したこと

flask-sqlalchemyの問題かと思い、インストールし直したり、3.0.3にアップデートしてみたりしました。

どのようにすれば解決できるか教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2023/08/07 03:53

Tracebackを省略せずに載せた方がよい(省略されると調べようがない)です
guest

回答1

0

ベストアンサー

flask db initFlask-Migrateを使った場合の手順のようです。
参考にしているドキュメントにそのような記述はありませんか?

Flask-SQLAlchemyだけで実行する場合、Create the Tablesにあるように実行すればDBを作成可能です。

以下のコードで作成する場合は、pythonインタープリターで実行ください。

python

1with app.app_context(): 2 db.create_all()

2023/08/09 追記

提供されたコードで、flask db initを実行したところ、エラー無く実行できました。

コメントに、以上のコードと最初に載せた[apps.py]で全てです。とありますが、質問文ではapp.pyとなっています。
どちらですか?

もし、apps.pyの場合、app.pyにリネームして試してみてください。

なお、apps.pyにした状態で、flask db initを実行しても、質問分にあるエラーメッセージは出力されません。

エラーメッセージは省略せず、全文を載せてください。
また、そのエラーが出た手順を追加ください。

投稿2023/08/07 00:20

編集2023/08/09 00:17
FiroProchainezo

総合スコア2421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

una_o0

2023/08/07 13:12

上のコードにもある通り、 『from flask_migrate import Migrate  Migrate(app, db)』 とFlask-Migrateを使っていますがエラーになってしまいます。
FiroProchainezo

2023/08/08 00:25

実行手順と、エラー全文を書いていただけますか。 念のため、インストールされているモジュールの一覧とバージョンもお願いします。(pip freeze)
una_o0

2023/08/08 12:32

長くなってしまいますが、よろしくお願いいたします。 バージョンはこんな感じです。 alembic==1.11.2 blinker==1.6.2 click==8.1.6 Flask==2.3.2 Flask-Migrate==4.0.4 Flask-SQLAlchemy==2.5.1 greenlet==2.0.2 itsdangerous==2.1.2 Jinja2==3.1.2 Mako==1.2.4 MarkupSafe==2.1.3 migrate==0.3.8 SQLAlchemy==2.0.19 typing_extensions==4.7.1 Werkzeug==2.3.6 [models.py] from datetime import datetime from apps.app import db class Blogpost(db.Model): """モデルクラス """ # テーブル名を「posted」にする __tablename__ = "posted" # 自動的に連番を振るフィールド、プライマリーキー id = db.Column( db.Integer, primary_key=True, autoincrement=True) # タイトル用のフィールド title = db.Column( db.String(200), nullable=False) # 本文用のフィールド contents = db.Column( db.Text, nullable=False) # 投稿日のフィールド create_at = db.Column( db.Date, default=datetime.today()) [settings.py] import os # モジュールの親ディレクトリのフルパスを取得 basedir = os.path.dirname(os.path.dirname(__file__)) # 親ディレクトリのblog.sqliteをデータベースに設定 SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join( basedir, 'blog.sqlite') SECRET_KEY = os.urandom(10) [__init__.py] import apps.models 以上のコードと最初に載せた[apps.py]で全てです。
FiroProchainezo

2023/08/09 00:04

追加情報は、質問を編集して、質問に書いてください。 コメントではインデントが削除され、装飾も使えないので、Pythonコードは読めません。
Ellieglover

2023/08/10 05:02 編集

循環インポートまたは競合する依存関係が問題の原因となっているかどうかを確認できます。問題が解決しない場合は、新しい仮想環境を作成し、Flask と Flask-Migrate を再インストールして、データベース初期化コマンドを再度実行してください。これにより、属性エラーが解決され、Flask データベースを正常に初期化できるようになります。https://www.livetheorangelife.net/
una_o0

2023/08/10 08:14

解決しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問