#python #flask #sqlalchemy
#python #flask #sqlalchemy
Вопрос:
Я новичок в Flask и пытаюсь создать блог. Я хочу создать страницу, с которой я хотел бы вставить сообщения. Теоретически страница должна перенаправляться на индекс, но каждый раз, когда я пытаюсь вставить содержимое на страницу «добавить», я получаю ошибку. Вот мой код:
from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////Users/admin/Desktop/Blog_Project/blog2.db'
db = SQLAlchemy(app)
class Blogpost(db.Model):
id = db.Column(db.Integer, primary_key = True)
title = db.Column(db.String(50))
subtitle = db.Column(db.String(50))
author = db.Column(db.String(20))
date_posted = db.Column(db.DateTime)
content = db.Column(db.Text)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/about')
def about():
return render_template('about.html')
@app.route('/post')
def post():
return render_template('post.html')
@app.route('/contact')
def contact():
return render_template('contact.html')
@app.route('/prova')
def prova():
return render_template('prova.html')
@app.route('/add')
def add():
return render_template('add.html')
@app.route('/addpost', methods=['POST'])
def addpost():
title = request.form['title']
subtitle = request.form['subtitle']
author = request.form["author"]
content = request.form['content']
post = Blogpost(title=title, subtitle=subtitle, author=author, content=content, date_posted = datetime.now())
db.session.add(post)
db.session.commit()
return redirect(url_for('index'))
if __name__ == "__main__":
app.run(debug = True)
И это ошибка, которую я получаю:
sqlalchemy.exc.OperationalError
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: blogpost
[SQL: INSERT INTO blogpost (title, subtitle, author, date_posted, content) VALUES (?, ?, ?, ?, ?)]
[parameters: ('ds', 'ds', 'sd', '2020-09-08 12:55:25.333277', 'ds')]
(Background on this error at: http://sqlalche.me/e/13/e3q8)
Насколько я понимаю, проблема в том, что Flask не может создать таблицу blogpost в базе данных blog2 и заполнить ее значениями, которые я вставил в код. Я прочитал некоторую документацию в Интернете и в Stackoverflow, и, по-видимому, некоторые люди исправили ту же проблему с помощью метода db.create_all()
, но я не уверен, куда мне следует ее вставить или следует ли мне реорганизовать код другим способом. У вас есть какие-либо предложения? Заранее большое вам спасибо!
Комментарии:
1. Сначала вы должны создать базу данных (я имею в виду, добавить в нее таблицы)
2. Вы имеете в виду, создавать их вручную? Не должно ли это происходить непосредственно через код?
3. В необработанном sqlalchemy, если вы не выдадите
Base.metadata.create_all
, это не будет сделано автоматически. Я мало что знаю о плагине flask-sqlalchemy, но, за исключением случаев, указанных другим способом, вы действительно должны docs.sqlalchemy.org/en/13/orm/tutorial.html#create-a-schema4. Хорошо, я попробую. Спасибо за объяснение!
5. Обратите внимание, что
create_all
команда не отслеживает изменения. Если вы добавите столбцы в существующие таблицы, они не будут отображаться. Поскольку вы новичок, такие решения, как alembic , вероятно, слишком сложны для правильного использования. Просто имейте в виду, что это проблема, которую вам нужно решить для долгосрочных проектов.alembic
это одно из решений.