attributeError:无法使用flask-SQLAlchemy

时间:2016-05-30 06:58:31

标签: python sqlalchemy flask-sqlalchemy

我正在使用安装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'

设置属性

2 个答案:

答案 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")

我希望这会有所帮助