LoginSignup
3
1

More than 1 year has passed since last update.

Flaskのflask db init時に発生するImportErrorの対処

Posted at

概要

Flaskのデータベースを作成する際に、「flask db init」コマンドでImportErrorが発生し、migrationsファイルが作成されなかったため、いろいろ試したことをメモ。

バージョン

flask==1.1.1
flask-sqlalchemy==2.4.3
flask-migrate==2.5.3
flask-login==0.5.0
flask-bcrypt==0.7.1
wtforms==2.3.1
email-validator==1.1.1

内容

set FLASK_APP=setup.pyからのflask db init時に

ImportError: cannot import name 'escape' from 'jinja2'

というエラーが発生しました。
調べた所、Flaskのv1系はescapeモジュールが利用できないらしいです。
そのため、flask==2.2.3に更新しました。
すると、別のエラーが発生。

ModuleNotFoundError: No module named 'flask.ext'

こちらは、flask.ext.sqlalchemyが古い形で既にサポートされていない為flask_sqlalchemyに変更する必要がありました。
次のエラー。

AttributeError: module 'time' has no attribute 'clock'

time.clock()はPython3.6以降では削除されたらしいです。
なので、代わりにtime.perf_counter()を利用します。
またまたエラー。。。

ImportError: cannot import name 'safe_str_cmp' from 'werkzeug.security'

このエラーに関してはwergzeugのv2.1.0リリースノートによると、safe_str_cmpが削除されたため、利用できないとの事でした。
そのため、代替手段としてhmacを利用しました。
次が最後のエラーです。。。

AttributeError: module 'sqlalchemy' has no attribute '__all__'. Did you mean: '__file__'?

https://teratail.com/questions/pmg713u6e7onk1 によると、SQLalchemyのv2系で起こるエラーのようで、解決方法としてはv3系にアップグレードするか、v1系にダウングレードするらしいです。
ただ、v1系だと依存関係でエラーが発生してしまう為、flask-sqlalchemy==3.0.3に更新しました。

最終的なバージョン

flask==2.2.3
flask-sqlalchemy==3.0.3
flask-migrate==2.5.3
flask-login==0.5.0
flask-bcrypt==0.7.1
wtforms==2.3.1
email-validator==1.1.1
werkzeug==2.2.3
jinja2==3.0.3

だらだら書いたせいで、読みにくくなってしまい申し訳ないですが、一人でもこの記事を見て解決してくれたら嬉しいです。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1