Я последовал этому уроку, чтобы изучить Python sqlAlchemy из этого урока Создание приложения CRUD с Flask и SQLAlchemy для начального уровня, и все шло хорошо.
До этого я шелеще один шаг, чтобы создать другую модель publisher
, такую же, как модель книги, для которой весь сценарий выглядит следующим образом:
import os
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
project_dir = os.path.dirname(os.path.abspath(__file__))
database_file = "sqlite:///{}".format(os.path.join(project_dir,"bookdatabase.db"))
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = database_file
db = SQLAlchemy(app)
class Book(db.Model):
title = db.Column(db.String(80), unique=True, nullable=False, primary_key=True)
def __init__(self, title):
self.title = title
super(Book,self).__init__()
def __repr__(self):
return "<Title: {}".format(self.title)
class Publisher(db.Model):
name = db.Column(db.String(80), unique=True, nullable=False, primary_key=True)
def __init__(self, name):
self.name = name
super(Publisher,self).__init__()
def __repr__(self):
return "<Name: {}".format(self.name)
@app.route("/", methods=["GET","POST"])
def home():
if request.form:
book = Book(title=request.form.get('title'))
db.session.add(book)
db.session.commit()
pub = Publisher(name=request.form.get('pub_name'))
db.session.add(Publisher)
db.session.commit()
return render_template('home.html')
if __name__=="__main__":
app.run(debug=True)
home.html
<html>
<body>
<form method="POST" action="/">
<fieldset>
<p>Book Title: <input type="text" name="title"></p>
</fieldset>
<fieldset>
<p>Pub Name: <input type="text" name="pub_name"></p>
</fieldset>
<input type="submit" value="Add">
</form>
</body>
</html>
После отправки формы я получил сообщение об ошибке:
sqlalchemy.orm.exc.UnmappedInstanceError UnmappedInstanceError: Класс 'flask_sqlalchemy._BoundDeclarativeMeta' не сопоставлен;был ли предоставлен класс ( main .Publisher), где требуется экземпляр?
Зная, что какой-то пользователь столкнулся с такой же проблемой, такой как thread , ноЯ до сих пор не могу понять, как решить эту проблему.
Пожалуйста, помогите мне с этим.Спасибо!