数据库的相对路径在app.py中不起作用?

问题描述 投票:0回答:1

有人可以帮我解决这个问题吗?我有一个(python)脚本将 JSON 密钥插入数据库(database.db)(参见下面的代码):

import json
import sqlite3

class QuestionDatabase:
    def __init__(self, json_file, db_file):
        self.json_file = json_file
        self.db_file = db_file
        self.conn = None
        self.cursor = None

    def connect(self):
        """Een connectie met SQLite Database maken."""
        self.conn = sqlite3.connect(self.db_file)
        self.cursor = self.conn.cursor()

    def load_data(self):
        """parsing JSON/ JSON gegevens laden."""
        with open(self.json_file, 'r') as file:
            data = json.load(file)
        return data

    def insert_questions(self, data):
        """SQL Query"""
        for item in data:
            question = item.get('question')
            question_id = item.get('question_id')
            self.cursor.execute('''
            INSERT INTO questions (questions_id, question) 
            VALUES (?, ?)''', (question_id, question))

    def commit_and_close(self):
        """veranderingen committen en verbinding met database sluiten."""
        self.conn.commit()
        self.conn.close()

    def run(self):
        """Main run functie"""
        self.connect()
        data = self.load_data()
        print(json.dumps(data, indent=7))  # Print data voor debugging
        self.insert_questions(data)
        self.commit_and_close()
        print('Data succesvol ingevoegd')

# Usage
if __name__ == "__main__":
    db = QuestionDatabase('../questions_extract.json', '../databases/database.db')
    db.run()

这个 .py 文件位于我的模型目录中。在代码的底部,我使用相对路径将计算机定向到数据库并运行(插入密钥没有问题)。但是,当我在 app.py 中使用相同的相对路径连接数据库时,出现 SQLite 无法连接到数据库的错误。我必须编写这样的代码才能使其工作:

from flask import Flask, render_template
import sqlite3

app = Flask(__name__)

def get_questions():
    """ Haal vragen uit de database"""
    conn = sqlite3.connect('/Users/raissalimon/PycharmProjects/wp2-2024-mvc-1a4-codegirls-1/databases/database.db')
    cursor = conn.cursor()
    cursor.execute('''SELECT questions_id, question FROM questions''')
    questions = cursor.fetchall()
    print(questions)
    conn.close()
    return questions

但是,这个项目是学校的小组项目,我的其他队友也必须使用这个代码。像我现在所做的那样使用绝对路径的问题是 - 我认为 - 这是指我的本地地图,这对他们来说是不同的。我怀疑由于这个绝对垫会收到错误消息。如何更改代码以便可以使用在 QuestionDatabase 文件中使用的相同路径?

尝试连接到 app.py 中的数据库(.db),就像我在 QuestionDatabase 中连接到它一样。我希望它能够使用数据库的相对路径(就像我在 QuestionDatabase 中所做的那样),但它只能使用绝对路径。

html sqlite flask
1个回答
0
投票

如果我没理解错的话,数据库位于您的应用程序文件夹中。这意味着涉及的每个人都可以使用绝对路径来访问数据库。这样做的前提是使用

os.path.join(app.root_path, 'databases/database.db')
创建路径,其中
app.root_path
指向应用程序目录。这意味着路径保持动态,具体取决于应用程序各自的安装位置。

© www.soinside.com 2019 - 2024. All rights reserved.