SQL Alchemy未创建数据库

0 投票
1 回答
38 浏览
提问于 2025-04-12 09:21

我正在跟着一个关于使用Flask和SQL Alchemy的CRUD教程。

在这个教程中,当他运行这段代码时,会创建一个叫做'instance'的文件夹,里面有一个.db文件。

而我运行同样的代码时,文件夹是创建了,但文件却没有。我检查了好几遍这段代码,和他的完全一致,所以我找不到为什么它不工作的原因。

#Imports 
from flask import Flask, render_template
from flask_scss import Scss
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import os 

#App
app = Flask(__name__)
Scss(app)

app.config['SQLALCHEMY_DATABASE_URI'] ='sqlite:///database.db'
db = SQLAlchemy(app)

#Data Class
class Task(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.String(length=100), 
    nullable=False)
    complete = db.Column(db.Integer, default=0)
    created = db.Column(db.DateTime, default=datetime.now())

    def __repr__(self) -> str:
        return f"Task {self.id}"


#Routes
@app.route("/")
def index():
    return render_template("index.html")


#Runner
if __name__ in "__main__":
    with app.app_context():
        db.create_all()

    app.run(debug=True)

感谢大家的帮助!

1 个回答

0

我刚在Windows上试了一下,运行得非常顺利。因为它能创建文件夹,所以我猜可能是创建.db文件的权限有问题:

  • 在Linux上可以用 chmod -R 777 app_directory_name 这个命令来修改权限
  • 在Windows上可以试着把它放在像文档文件夹这样的地方

或者可能是相对路径的问题:
可以试着在 app.app_context() 中加上这一行

if __name__ in "__main__":
    with app.app_context():
        print(db.engines)

然后检查一下打印出来的路径是否正确

如果这两种方法都不行,可以试着创建一个新的虚拟环境(python -m venv venv),或者换个操作系统试试。

撰写回答