亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何修復 Flask 應用程序中的“錯誤:無法打開數據庫文件”?

如何修復 Flask 應用程序中的“錯誤:無法打開數據庫文件”?

智慧大石 2021-12-17 14:53:22
我正在創建一個 Flask 服務器,它將顯示從 sqlite3 數據庫查詢的信息。但是,當我在運行 localhost 后嘗試訪問數據庫文件時,它返回以下錯誤。File "C:\Users\Connor\Documents\Parking\app\routes.py", line 13, in index    con = sqlite3.connect(app.config['SQLALCHEMY_DATABASE_URI'])sqlite3.OperationalError: unable to open database file127.0.0.1 - - [26/Mar/2019 20:30:57] "GET / HTTP/1.1" 500 -我幾乎肯定問題源于sqlite:///,但我無法弄清楚。建議的解決方案似乎也沒有答案。routes.pyfrom app import appfrom flask import Flask, flash, redirect, request, render_template, session, url_forimport sqlite3app.secret_key = app.config['SECRET_KEY']@app.route('/')@app.route('/index')def index():    con = sqlite3.connect(app.config['SQLALCHEMY_DATABASE_URI'])    cur = con.cursor()    cur.execute("SELECT * FROM Lot")    data = cur.fetchall()    return render_template('index.html', data=data)config.pyimport osPROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))class Config(object):    SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(PROJECT_ROOT, 'app.db')    SQLALCHEMY_TRACK_MODIFICATIONS = False    DEBUG = True    SECRET_KEY = 'development key'init.pyfrom flask import Flaskfrom config import Configfrom flask_sqlalchemy import SQLAlchemyfrom flask_migrate import Migrateapp = Flask(__name__)app.config.from_object(Config)db = SQLAlchemy(app)打印app.config['SQLALCHEMY_DATABASE_URI']返回sqlite:///C:\Users\Connor\Documents\Parking\app.db。我認為正斜杠是我問題的根源。我嘗試了 os.path 的幾種變體,但無濟于事。奇怪的是,當我手動輸入路徑時,數據庫顯示得很好,并且可以在管理門戶中操作其數據。當我使用 時os.path.join(PROJECT_ROOT, 'app.db'),數據庫會顯示,但我無法在管理門戶中操作其數據。當我使用 時"sqlite:///" + os.path.join(PROJECT_ROOT, 'app.db'),我根本無法訪問數據庫。我相信我sqlite:///按照本文檔正確使用,所以也許我只是遺漏了什么?
查看完整描述

1 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

這里的問題是您使用的是 sqlalchemy 連接 url,但嘗試直接通過 sqlite3 api 進行連接。

這行代碼來自您的index()路線:

con = sqlite3.connect(app.config['SQLALCHEMY_DATABASE_URI'])

...調用該sqllite3.connect()函數,并且您正在傳遞您的 sqlalchemy 連接 url: SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(PROJECT_ROOT, 'app.db')。

這是 的函數簽名sqlite3.connect()

sqlite3.connect(database[, timeout, detect_types, isolation_level, check_same_thread, factory, cached_statements, uri])

這是關于可以作為database參數傳遞的內容的文檔摘錄:

database 是一個類似路徑的對象,給出要打開的數據庫文件的路徑名(絕對或相對于當前工作目錄)。

sqllite:///some/path/to/app.db 不是有效的路徑名,這就是引發錯誤的原因。

您已經解決了配置的所有麻煩flask_sqlalchemy,所以您不妨使用它!

from app import app, db  # <== notice import of db here

from flask import (Flask, flash, redirect, request, render_template,

                   session, url_for)


app.secret_key = app.config['SECRET_KEY']


@app.route('/')

@app.route('/index')

def index():

    data = db.session.execute("SELECT * FROM Lot").fetchall()

    return render_template('index.html', data=data)

這有一個額外的好處,包括 Flask-SQLAlchemy 附帶的會話管理。


查看完整回答
反對 回復 2021-12-17
  • 1 回答
  • 0 關注
  • 287 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號