sqlite 在更新了Python和SQLAlChemy之后无法连接到数据库

fhg3lkii  于 2022-11-14  发布在  SQLite
关注(0)|答案(1)|浏览(302)

我在一个虚拟环境中有一个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
vof42yt1

vof42yt11#

出现差异的原因是SQLALCHEMY_数据库_URI。在使用相对路径配置SQLite数据库时,flASK-SQLAlChemy更改了文件位置:
使用相对路径配置SQLite是相对于app.instance_Path而不是app.root_Path的。如有必要,将创建示例文件夹
有关这一点的详细信息,请参阅版本3.0的FlaskSQLAlChemy更改日志
我的目录结构:

Flask-Connector
|
|build
|Connector
    |Database
        |testdb.db
    |forms
    |Models
    |routes
    |templates
    |__init__.py
|dist
|instance
|KBVDefinition
|migrations
|static
|tests
|venv(310)
|venv(311)
.gitignore
app.py
app.spec
readme.md
requirements.txt

这意味着我的app.rootpath是 flask 连接器/连接器
我的app.instancepath是 flask 连接器/示例
导致不同的位置并产生错误。
我现在会重新考虑我的项目结构,并尝试找到一个对两个版本都适用的结构。
或者只需使用OS模块配置自定义的relativepath:

import os

dbpath = f"{os.getcwd()}\\Connector\\Database\\testdb.db"

app.config['SQLALCHEMY_DATABASE_URI'] = f"sqlite:///{dbpath}"

相关问题