Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何修复';错误:无法打开数据库文件';在烧瓶应用程序中?_Python_Flask_Sqlite_Sqlalchemy - Fatal编程技术网

Python 如何修复';错误:无法打开数据库文件';在烧瓶应用程序中?

Python 如何修复';错误:无法打开数据库文件';在烧瓶应用程序中?,python,flask,sqlite,sqlalchemy,Python,Flask,Sqlite,Sqlalchemy,我正在创建一个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

我正在创建一个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 file
127.0.0.1 - - [26/Mar/2019 20:30:57] "GET / HTTP/1.1" 500 -
我几乎可以肯定问题源于sqlite://,但我无法理解。所建议的解决方案似乎都没有答案

routes.py

from app import app
from flask import Flask, flash, redirect, request, render_template, 
session, url_for
import sqlite3

app.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.py

import os

PROJECT_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.py

from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
打印
app.config['SQLALCHEMY\u DATABASE\u URI']
返回
sqlite:///C:\用户\Connor\Documents\Parking\app.db
。我认为向前斜杠是我问题的根源。我尝试了几种os.path的变体,但都没有用

奇怪的是,当我手动输入路径时,数据库显示得很好,它的数据可以在管理门户中操作。当我使用
os.path.join(PROJECT_ROOT,'app.db')
时,会显示数据库,但我无法在管理门户中操作其数据。当我使用sqlite://“+os.path.join(PROJECT_ROOT,'app.db')时,我根本无法访问数据库


我相信我使用的sqlite:////是正确的,因此可能我遗漏了什么?

这里的问题是,您使用的是sqlalchemy连接url,但试图通过sqlite3 api直接连接

这行代码来自您的
索引()
路线:

con = sqlite3.connect(app.config['SQLALCHEMY_DATABASE_URI'])
…调用
sqllite3.connect()
函数,您将传递您的sqlalchemy连接url:
sqlalchemy\u数据库\u URI=“sqlite://“+os.path.join(PROJECT\u ROOT,'app.db')

以下是sqlite3.connect()的函数签名:

下面是文档的一个摘录,关于可以作为
数据库
参数传递的内容:

数据库是一个类似路径的对象,提供路径名(绝对或 相对于要创建的数据库文件的当前工作目录) 打开

sqllite:///some/path/to/app.db
不是有效的路径名,因此会引发错误

您在配置flask\u 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)

从应用程序导入应用程序,db#完美!非常感谢你。
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)