我会尽量写得很简短,代码会很零碎,我会尽量不写太多。我只想说我在控制台中逐行检查了所有内容,我将在下面附加错误。我有一个有五个字段的类,第一和第五是明确的。
class Article(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
intro = db.Column(db.String(300), nullable=False)
text = db.Column(db.Text, nullable=False)
date = db.Column(db.DateTime, default=datetime.utcnow)
def __repr__(self):
return '<Article %r>' % (self.id)
对象填写表格:
<form action="/create-article" method="post">
<input type="text" name="title" id="title" class="form-control"></br>
<textarea name="intro" id="intro" class="form-control"></textarea></br>
<textarea name="text" id="text" class="form-control"></textarea></br>
<input type="submit" class="btn btn-success" value="Отправить">
然后使用 post 方法,我只需创建一个填充了字段的对象
def create_article():
if request.method == 'POST':
title = request.form['title']
intro = request.form['intro']
text = request.form['text']
article = Article(title=title, intro=intro, text=text)
with app.app_context():
try:
db.session.add(article)
db.session.commit()
return redirect('/')
except:
return 'Error'
else:
return render_template('create-article.html')
起初我很长一段时间无法创建数据库本身,据我了解,新版本的Flask有这样的问题。我阅读了文档,我必须以
with app.app_context():
不同的方式编写它
这通常意味着您尝试使用当前应用程序所需的功能。要解决此问题,请设置应用程序上下文
with app.app_context()
。请参阅文档以获取更多信息。
那么,向数据库添加文章时,这也是唯一的方法。
返回“错误”
我在控制台中逐行尝试了所有内容,该步骤db.session.commit()
出现错误
> sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: article
[SQL: INSERT INTO article (title, intro, text, date) VALUES (?, ?, ?, ?)]
[parameters: ('title', 'intro', 'text', '2024-03-13 04:25:38.283046')]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
当然,我在弄清楚app_context之后创建了数据库
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
在控制台中,我只是手动将同名行添加到三个字段中进行测试。
显然该文章对象不存在。我恳请你帮我解决这个问题。