python - sqlalchemy.exc.InvalidRequestError:一个或多个映射器未能初始化
问题描述
尝试通过以下方式使用 SQLAlchemy 在 SqlLiteDb 中插入新记录:
user_1=User(username='First User',userEmail='first@email.com',password='password')
我收到以下错误:
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 initializing mapper mapped class User->user, expression 'Post' failed to locate a name ('Post'). If this is a class name, consider adding this relationship() to the <class 'flaskblog.User'> class after both dependent classes have been defined.
class User(flaskDb.Model):
id = flaskDb.Column(flaskDb.Integer, primary_key=True)
username = flaskDb.Column(flaskDb.String(20), unique=True, nullable=False)
userEmail = flaskDb.Column(flaskDb.String(
120), unique=True, nullable=False)
password = flaskDb.Column(flaskDb.String(20), nullable=False)
image_file = flaskDb.Column(flaskDb.String(
20), nullable=False, default="default.jpg")
posts = flaskDb.relationship('Post', backref="author", lazy=True)
def __repr__(self):
return f"User('{self.username}','{self.userEmail}','{self.image_file}')"
class Post(flaskDb.Model):
id = flaskDb.Column(flaskDb.Integer, primary_key=True, nullable=False)
title = flaskDb.Column(flaskDb.String(25), nullable=False)
content = flaskDb.Column(flaskDb.Text, nullable=False)
datePosted = flaskDb.Column(
flaskDb.DateTime, nullable=False, default=datetime.utcnow)
user_id = flaskDb.Column(
flaskDb.Integer, flaskDb.ForeignKey('user.id'), nullable=False)
def __repr__(self):
return f"Post('{self.title}','{self.datePosted}','{self.title}')"
接下来我可以尝试什么?
解决方案
您遇到循环依赖错误。
而不是将帖子放在 Sser 中。
posts = flaskDb.relationship('Post', backref="author", lazy=True)
将其删除并将其放在帖子上。
user = flaskDb.relationship('User', backref="posts", lazy=True)
您仍然可以通过以下方式访问用户:
usera = User.query.get(1)
usera.posts
推荐阅读
- javascript - 如何使 google recaptcha 响应宽度为 100%
- windows - 尝试使用 Visual Studio Code 进行调试时,Rust 应用程序崩溃
- android - 如何在没有 NDK 的情况下访问 android COM 端口
- workbox - 从 v2 升级到 v3 时的“templatedUrls”
- sublimetext3 - 具有不同扩展名的 XML 的 Sublime 构建
- c - 在 Linux 中使用 pthread 时,是否必须在线程结束后关闭线程?
- ios - 调用 setNeedsLayout 或 setNeedDisplay 的场合
- python - 根据内部 for 循环中的条件打破外部 Python for 循环
- c++ - 如何编译 C++ 文件而不在 Visual Studio 2017 中创建项目?
- android-ndk - 如何调试 mapbox 崩溃