我正在使用安装sqlalchemy版本1.x的Flask-SQLAlchemy 2.1版。
我的下面代码首先获取结果集数组,然后循环修改现有的属性,但现在却没有。
question_topic = Question.query.join(Topic).join(User,User.id==Question.user_id).add_columns(User.email,Question.question, Question.date, Topic.topic_name, Question.id, Topic.question_id)\
.filter(Question.id == Topic.question_id).all()
for q_t in question_topic:
q_t.topic_name = q_t.topic_name + "some text..."
我收到以下错误: attributeError:无法使用'topic_name'
设置属性答案 0 :(得分:4)
我在新列上遇到了同样的错误(" AttributeError:无法设置属性"错误)。这是由于我之前添加的@property,其名称与列相同。
答案 1 :(得分:1)
我有完全相同的错误,我尝试修改从我的数据库获取的sqlalchemy对象。 当我打印它时,我看到一个元组,检查它是否是。 我通过重构我的模型来解决问题,我想在我的关系上添加一些字段。 首先我有:
assoc_host_software = Table("host_software", Base.metadata,
Column("host_id", Integer, ForeignKey("host.id")),
Column("software_id", Integer, ForeignKey("software.id")),
)
然后我尝试
assoc_host_software = Table("host_software", Base.metadata,
Column("host_id", Integer, ForeignKey("host.id")),
Column("software_id", Integer, ForeignKey("software.id")),
Column("in_date",DateTime, unique=False, nullable=True),
Column("out_date",DateTime, unique=False, nullable=True)
)
当我从assoc_host_software获取对象并尝试更新他时,我得到了同样的错误。 我理解(并且记住)这不是从多对多关系修改对象的正确方法 所以 我将我的模型转换为
class Host_Software(Base):
"""Model for relation host software."""
__tablename__ = 'host_software'
host_id = Column(Integer, ForeignKey("host.id"), primary_key=True)
software_id = Column(Integer, ForeignKey("software.id"), primary_key=True)
in_date = Column(DateTime, unique=False, nullable=True)
out_date = Column(DateTime, unique=False, nullable=False)
software = relationship("Software", backref="software_associations")
host = relationship("Host", backref="host_associations")
我希望这会有所帮助