Получение InvalidRequestError при вставке новой сущности? - PullRequest
1 голос
/ 13 марта 2020

Я пытаюсь выучить , и я использую руководство, которое просматривает базы данных.

У меня есть следующий код:

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}', '{self.image_file}')"


class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Post('{self.title}', '{self.date_posted}')"

Я создал свою базу данных, выполнив код db.create_all(), который дал мне файл базы данных.

Пока все хорошо,

Теперь я хочу добавить пользователя, поэтому я пишу:

user_1 = User(username="Bob", email="bob@gmail.com", password="password123")

Теперь я получаю следующую трассировку ошибки, которую я не понимаю

sqlalchemy.exc.InvalidRequestError: One or more mappers failed to initialize - can't proceed with initialization of other mappers. Triggering mapper: 'mapped class User->user'. Original exception was: When initial
izing mapper mapped class User->user, expression 'Post' failed to locate a name ("name 'Post' is not defined"). If this is a class name, consider adding this relationship() to the <class 'flaskblog.User'> class af
ter both dependent classes have been defined.
>>> user_1 = User(username = 'Bob', email='bob@gmail.com', password='password123')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 2, in __init__
  File "C:\Users\Bob\PycharmProject\flasktutorial\venv\lib\site-packages\sqlalchemy\orm\instrumentation.py", line 376, in _new_state_if_none
    state = self._state_constructor(instance, self)
  File "C:\Users\Bob\PycharmProject\flasktutorial\venv\lib\site-packages\sqlalchemy\util\langhelpers.py", line 883, in __get__
    obj.__dict__[self.__name__] = result = self.fget(obj)
  File "C:\Users\Bob\PycharmProject\flasktutorial\venv\lib\site-packages\sqlalchemy\orm\instrumentation.py", line 202, in _state_constructor
    self.dispatch.first_init(self, self.class_)
  File "C:\Users\Bob\PycharmProject\flasktutorial\venv\lib\site-packages\sqlalchemy\event\attr.py", line 322, in __call__
    fn(*args, **kw)
  File "C:\Users\Bob\PycharmProject\flasktutorial\venv\lib\site-packages\sqlalchemy\orm\mapper.py", line 3367, in _event_on_first_init
    configure_mappers()
  File "C:\Users\Bob\PycharmProject\flasktutorial\venv\lib\site-packages\sqlalchemy\orm\mapper.py", line 3251, in configure_mappers
    raise e
sqlalchemy.exc.InvalidRequestError: One or more mappers failed to initialize - can't proceed with initialization of other mappers. Triggering mapper: 'mapped class User->user'. Original exception was: When initial
izing mapper mapped class User->user, expression 'Post' failed to locate a name ("name 'Post' is not defined"). If this is a class name, consider adding this relationship() to the <class 'flaskblog.User'> class af
ter both dependent classes have been defined.

Может кто-нибудь помочь объяснить, что не так и как исправить, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...