gpt4 book ai didi

python - 无法为映射表组装任何主键列

转载 作者:IT老高 更新时间:2023-10-28 21:57:29 27 4
gpt4 key购买 nike

当我尝试创建数据库架构迁移时,我遇到了这个奇怪的错误。你能帮我找出问题所在吗?

$ python app.py db upgrade
[skipped]
sqlalchemy.exc.ArgumentError: Mapper Mapper|EssayStateAssociations|essay_associations could not assemble any primary key columns for mapped table 'essay_associations'

我的模特:

class EssayStateAssociations(db.Model):
__tablename__ = 'essay_associations'

application_essay_id = db.Column(
db.Integer,
db.ForeignKey("application_essay.id"),
primary_key=True),
theme_essay_id = db.Column(
db.Integer,
db.ForeignKey("theme_essay.id"),
primary_key=True),
state = db.Column(db.String, default="pending")

最佳答案

您收到此错误是因为您的 Column() 定义后面有逗号,这导致 application_essay_idtheme_essay_id 分别被解析为一个包含 Column 而不仅仅是 Column 的单元素元组。这会阻止 SQLAlchemy“看到”列存在,从而导致您的模型不包含任何主键列。

如果你只是替换

application_essay_id = db.Column(
db.Integer,
db.ForeignKey("application_essay.id"),
primary_key=True),
theme_essay_id = db.Column(
db.Integer,
db.ForeignKey("theme_essay.id"),
primary_key=True),

application_essay_id = db.Column(
db.Integer,
db.ForeignKey("application_essay.id"),
primary_key=True)
theme_essay_id = db.Column(
db.Integer,
db.ForeignKey("theme_essay.id"),
primary_key=True)

那么您的错误将得到修复。

除此之外:因为 SQLAlchemy(以及 Alembic 和 Flask-SQLAlchemy)包含一些用于声明模型/表的语法,这些语法涉及将逗号分隔的 Column 序列作为参数传递(例如,传递给 op .create_table()Table() 构造函数)以及其他涉及将 Columns 声明为类属性的类,这真的很容易 通过将 Column 声明从第一种语法剪切并粘贴到第二种语法并忘记删除一些逗号来遇到此错误。我怀疑这个容易犯的错误是这个问题有如此大量观点的原因——在我发布这个答案时超过 16000。

关于python - 无法为映射表组装任何主键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24872541/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com