実現したいこと
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

回答1件
あなたの回答
tips
プレビュー