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

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

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

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

Python 3.x

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

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Q&A

解決済

1回答

1052閲覧

Flask-SQLAlchemyでDBを作成しWebアプリケーションを正常にデプロイしたい。

kumakinkan

総合スコア1

Flask

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

Python 3.x

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

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

0グッド

0クリップ

投稿2023/05/05 23:27

実現したいこと

Flask-SQLAlchemyでDBを作成しWebアプリケーションを正常にデプロイしたい。

前提

FlaskにてWebアプリケーションを開発し完成しました。
VPS(Ubuntu 22.04)を契約し、以下のような環境を構築しました。
・nginx
・uwsgi
・Flask等必要なモジュールのインストール

Webブラウザからトップページを表示させることは出来ましたが、
DB関連の表示がされません。
ローカルで作ったDBをそのままVPS側に移動させても使用出来なさそうなので、
新たにVPS側でデータベースの作成作業を行いましたがうまくいきません。
DBを作成する方法をご教授頂けましたら幸いです。

下記はvenv環境でapp.pyと同じ階層で対話モードにて実行しています。

python

1from app import app 2form model import db 3with app.app_context(): 4 db.create_all()
Traceback (most recent call last): File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 145, in __init__ self._dbapi_connection = engine.raw_connection() File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3288, in raw_connection return self.pool.connect() File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 452, in connect return _ConnectionFairy._checkout(self) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 1268, in _checkout fairy = _ConnectionRecord.checkout(pool) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 716, in checkout rec = pool._do_get() File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 168, in _do_get with util.safe_reraise(): File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 147, in __exit__ raise exc_value.with_traceback(exc_tb) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 166, in _do_get return self._create_connection() File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 393, in _create_connection return _ConnectionRecord(self) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 678, in __init__ self.__connect() File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 902, in __connect with util.safe_reraise(): File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 147, in __exit__ raise exc_value.with_traceback(exc_tb) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 898, in __connect self.dbapi_connection = connection = pool._invoke_creator(self) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 637, in connect return dialect.connect(*cargs, **cparams) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 616, in connect return self.loaded_dbapi.connect(*cargs, **cparams) sqlite3.OperationalError: unable to open database file The above exception was the direct cause of the following exception: Traceback (most recent call last): File "<stdin>", line 2, in <module> File "/var/www/myapp/venv/lib/python3.10/site-packages/flask_sqlalchemy/extension.py", line 884, in create_all self._call_for_binds(bind_key, "create_all") File "/var/www/myapp/venv/lib/python3.10/site-packages/flask_sqlalchemy/extension.py", line 865, in _call_for_binds getattr(metadata, op_name)(bind=engine) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/sql/schema.py", line 5796, in create_all bind._run_ddl_visitor( File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3238, in _run_ddl_visitor with self.begin() as conn: File "/usr/lib/python3.10/contextlib.py", line 135, in __enter__ return next(self.gen) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3228, in begin with self.connect() as conn: File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3264, in connect return self._connection_cls(self) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 147, in __init__ Connection._handle_dbapi_exception_noconnection( File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2426, in _handle_dbapi_exception_noconnection raise sqlalchemy_exception.with_traceback(exc_info[2]) from e File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 145, in __init__ self._dbapi_connection = engine.raw_connection() File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3288, in raw_connection return self.pool.connect() File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 452, in connect return _ConnectionFairy._checkout(self) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 1268, in _checkout fairy = _ConnectionRecord.checkout(pool) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 716, in checkout rec = pool._do_get() File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 168, in _do_get with util.safe_reraise(): File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 147, in __exit__ raise exc_value.with_traceback(exc_tb) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 166, in _do_get return self._create_connection() File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 393, in _create_connection return _ConnectionRecord(self) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 678, in __init__ self.__connect() File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 902, in __connect with util.safe_reraise(): File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 147, in __exit__ raise exc_value.with_traceback(exc_tb) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 898, in __connect self.dbapi_connection = connection = pool._invoke_creator(self) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 637, in connect return dialect.connect(*cargs, **cparams) File "/var/www/myapp/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 616, in connect return self.loaded_dbapi.connect(*cargs, **cparams) sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file (Background on this error at: https://sqlalche.me/e/20/e3q8)

model.pyのソースコード

from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() def init_db(app): app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///test.db" app.config["SECRET_KEY"] = os.urandom(24) db.init_app(app) class Test(db.Model): __tablename__ = 'test' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(255), nullable=False, unique=True)

試したこと

・Windowsのローカル環境で全く同じ手順でDBの作成は可能でした。
・SQLALCHEMY_DATABASE_URIのパスを絶対パスに変更しても同じエラー表示でした。
・エラー文で検索かけましたが、DBが開けないことによるエラーとのことで解決には至りませんでした。

補足情報(FW/ツールのバージョンなど)

Flask==2.3.2
Flask-SQLAlchemy==3.0.3
SQLAlchemy==2.0.12

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2023/05/06 08:55

https://stackoverflow.com/questions/4636970/sqlite3-operationalerror-unable-to-open-database-file 上のリンクなどを参考にしますと、 /test.db (ルートディレクトリ)にファイルは作成できそうでしょうか? SQLAlchemyから.dbファイルを作成する前に、 任意のディレクトリにテキストファイルなどを作成してみて、 権限的に大丈夫そうなところ(ディレクトリ)にtest.dbを作成することを試してみたら いかがでしょうか?
kumakinkan

2023/05/06 18:57

コメント頂きありがとうございます。 ルートディレクトリに変更しても同じエラーで作成出来ませんでした。 しかし、app.config["SQLALCHEMY_DATABASE_URI"]のsqlite:///test.dbをsqlite:///test.todoに変更したら正常に作成されました。
退会済みユーザー

退会済みユーザー

2023/05/07 00:58

コメントありがとうございます。 私は見当違いのことを書いてしまったみたいですね・・ ルートディレクトリにも作成できたのですね・・ (それ以外の個人ユーザー用のドキュメントディレクトリなどで試してみたらどうかな??と思って書いていました) でも、.dbじゃなくて.todoだとOKというのは不思議ですね。 すでにtest.dbが存在していたからエラーになってしまった、とかですかね。 (でもエラーメッセージ的にそうではなさそうですよね)
guest

回答1

0

自己解決

app.config["SQLALCHEMY_DATABASE_URI"]のsqlite:///test.dbをsqlite:///test.todoに変更したら正常に作成されました。

投稿2023/05/06 18:56

kumakinkan

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問