我在一个虚拟环境中有一个SQLite数据库,使用的是Python3.10、Flask2.1.3和FlaskSQLAlChemy 2.5.1(取决于FlaskSQLAlChemy 1.4.40)。我想尝试使用PythonBuild 3.11来改进错误日志,这样我就可以在PyCharm中配置一个新的解释器来切换到它,如果它不起作用,可以简单地切换回来。
我安装了最新版本的二手包,并没有真正考虑这会有什么作用(这向我展示了……)。现在我有了Flask2.2.2和FlaskSQLAlChemy 3.0.2,并且无法连接到SQLite数据库。当我使用我的3.10解释器时,一切正常,当我切换到3.11解释器时,每次我试图访问数据库时,我得到:
SqlalChemy.ex.OperationalError:(sqlite3.OperationalError)无法打开数据库文件
我找不到出了什么问题。当我根据FlaskSQLAlChemy文档设置一个新项目时,一切都与解释器一起工作。
应用程序的初始化:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
from flask_migrate import Migrate
from flask_bootstrap import Bootstrap5
db = SQLAlchemy()
SECRET_KEY = os.urandom(32)
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database/testdb.db'
app.config['SECRET_KEY'] = SECRET_KEY
app.config['SERVER_NAME'] = 'localhost:5000'
db.init_app(app)
Bootstrap5(app)
migrate = Migrate(app, db, render_as_batch=True)
from Connector.routes import routes
1条答案
按热度按时间vof42yt11#
出现差异的原因是SQLALCHEMY_数据库_URI。在使用相对路径配置SQLite数据库时,flASK-SQLAlChemy更改了文件位置:
使用相对路径配置SQLite是相对于app.instance_Path而不是app.root_Path的。如有必要,将创建示例文件夹
有关这一点的详细信息,请参阅版本3.0的FlaskSQLAlChemy更改日志
我的目录结构:
这意味着我的app.rootpath是 flask 连接器/连接器
我的app.instancepath是 flask 连接器/示例
导致不同的位置并产生错误。
我现在会重新考虑我的项目结构,并尝试找到一个对两个版本都适用的结构。
或者只需使用OS模块配置自定义的relativepath: