Не удалось отправить данные из формы в SQLAlchemy: sqlalchemy.orm.exc.UnmappedInstanceError? - PullRequest
0 голосов
/ 30 мая 2018

Я последовал этому уроку, чтобы изучить 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 , ноЯ до сих пор не могу понять, как решить эту проблему.

Пожалуйста, помогите мне с этим.Спасибо!

...