有人可以帮我解决这个问题吗?我有一个(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 中所做的那样),但它只能使用绝对路径。
如果我没理解错的话,数据库位于您的应用程序文件夹中。这意味着涉及的每个人都可以使用绝对路径来访问数据库。这样做的前提是使用
os.path.join(app.root_path, 'databases/database.db')
创建路径,其中 app.root_path
指向应用程序目录。这意味着路径保持动态,具体取决于应用程序各自的安装位置。