如何将docker卷"数据库/应用程序.db"连接到SQLAlchemy?



我正在使用Python 3.8.1Flask latest和运行良好的应用程序,但无法从SQLAlchemy连接docker卷,如果数据库不存在,它应该创建数据库,但我无法将共享的docker卷连接到Python Flask应用程序。

Config.py文件:

import os
basedir = os.path.abspath(os.path.dirname(__file__))
DATA_PATH = "/database"
if os.path.exists(DATA_PATH) == False:
os.mkdir(DATA_PATH)
class Config(object):
# set a proper secret key here or is the .flaskenv file
SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess'
SQLALCHEMY_DATABASE_URI = 'sqlite://database/app.db'
SQLALCHEMY_TRACK_MODIFICATIONS = False

init.py文件:

from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager
app = Flask(__name__, static_url_path='', static_folder='static')
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
login = LoginManager(app)
login.login_view = 'login'
from app import routes, models

Docker运行:

docker run -p 8080:8080 -it --name abc -v localdb:/database  --rm abc:v1

错误1:

xc.ArgumentError(
sqlalchemy.exc.ArgumentError: Invalid SQLite URL: 
sqlite://database//app/app/app.db
Valid SQLite URL forms are:
sqlite:///:memory: (or, sqlite://)
sqlite:///relative/path/to/file.db
sqlite:////absolute/path/to/file.db

错误2:

对于SQLALCHEMY_DATABASE_URI = 'sqlite:///database/app.db'

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file
(Background on this error at: http://sqlalche.me/e/e3q8)

这看起来不像是Docker卷的问题,它看起来像是你试图使用一个路径作为URI来访问数据库,而不是:sqlite:////path/to/db.db

请参阅:https://docs.sqlalchemy.org/en/13/core/engines.html#database-urls

特别针对sqlite:https://docs.sqlalchemy.org/en/13/core/engines.html#sqlite

最新更新