【发布时间】:2021-10-19 20:54:35
【问题描述】:
我正在尝试制作一个 RESTful 博客。
当我向我的博客添加“新帖子”时出现问题,它返回以下错误。
我已经尝试用谷歌搜索这个问题几个小时了,但找不到任何解决方案。
代码可以从数据库中读取数据,我所有的路由都可以正常工作,除了应该添加数据的 create_new_post 路由。
我已经缩小了似乎是数据库路径的问题,但我似乎无法弄清楚它有什么问题。
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file [SQL: INSERT INTO blog_post (title, subtitle, date, body, author, img_url) VALUES (?, ?, ?, ?, ?, ?)] [parameters: ('Blog Post Title', 'Subtitle goes here', 'August 18, 2021', '<p>BLog Content content</p>\r\n', 'Your Name', 'https://images.unsplash.com/photo-1629103257407-6eee51452cbd?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=701&q=80')] (Background on this error at: http://sqlalche.me/e/13/e3q8)
from flask import Flask, render_template, redirect, url_for
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired, URL
from flask_ckeditor import CKEditor, CKEditorField
from datetime import datetime, date
app = Flask(__name__)
##CONNECT TO DB
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///posts.db'
db = SQLAlchemy(app)
app.config['SECRET_KEY'] = '8BYkEfBA6O6donzWlSihBXox7C0sKR6b'
ckeditor = CKEditor(app)
Bootstrap(app)
# Returns the current year to be passed on the jinja templates. Used in website's footer
@app.context_processor
def inject_now():
return {"now": datetime.utcnow()}
##CONFIGURE TABLE
class BlogPost(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(250), unique=True, nullable=False)
subtitle = db.Column(db.String(250), nullable=False)
date = db.Column(db.String(250), nullable=False)
body = db.Column(db.Text, nullable=False)
author = db.Column(db.String(250), nullable=False)
img_url = db.Column(db.String(250), nullable=False)
##WTForm
class CreatePostForm(FlaskForm):
title = StringField("Blog Post Title", validators=[DataRequired()])
subtitle = StringField("Subtitle", validators=[DataRequired()])
author = StringField("Your Name", validators=[DataRequired()])
img_url = StringField("Blog Image URL", validators=[DataRequired(), URL()])
body = CKEditorField("Blog Content", validators=[DataRequired()])
submit = SubmitField("Submit Post")
##CKEditor
@app.route('/')
@app.route('/index')
def get_all_posts():
posts = BlogPost.query.all()
return render_template("index.html", all_posts=posts)
@app.route("/post/<int:post_id>")
def show_post(post_id):
requested_post = BlogPost.query.get(post_id)
return render_template("post.html", post=requested_post)
@app.route("/about")
def about():
return render_template("about.html")
@app.route("/contact")
def contact():
return render_template("contact.html")
@app.route("/new-post", methods=["GET", "POST"])
def create_new_post():
form = CreatePostForm()
if form.validate_on_submit():
new_post = BlogPost(
title=form.title.data,
subtitle=form.subtitle.data,
body=form.body.data,
img_url=form.img_url.data,
author=form.author.data,
date=date.today().strftime("%B %d, %Y")
)
db.session.add(new_post)
db.session.commit()
return redirect(url_for("get_all_posts"))
return render_template("make-post.html", form=form)
if __name__ == "__main__":
app.run(debug=True)
【问题讨论】:
-
尝试使用完整的绝对路径,并确保您对文件及其所在文件夹具有写入权限。
-
@KlausD。我尝试了您的解决方案,但问题仍然存在。
-
您在目录中找到您的posts.db 文件了吗??
-
是的,我可以找到posts.db文件,读取数据库中的数据没有问题,只有在添加新数据时才会出现问题
-
只是一个更新,我尝试在另一台笔记本电脑上运行相同的代码并且它工作,一定是因为我的旧笔记本电脑中有很多奇怪的东西,无论如何我已经重新格式化 Windows,现在它可以工作了
标签: python rest flask flask-sqlalchemy flask-restful