Я пытаюсь выучить flask, и я использую руководство, которое просматривает базы данных.
У меня есть следующий код:
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.
Может кто-нибудь помочь объяснить, что не так и как исправить, пожалуйста?