Python 用于选择父项的父项的sqlalchemy表达式

Python 用于选择父项的父项的sqlalchemy表达式,python,sqlalchemy,flask-sqlalchemy,Python,Sqlalchemy,Flask Sqlalchemy,我在ORM模型中有三个类,它们之间有一对多的关系。如何使用孙子类('Login')中的hybrid_属性获取祖父母('Role')的'name'属性 更新: 我在flask admin视图的“column_list”中使用新属性“user”。 我尝试了db.session而不是Sessions,但失败了。我再次尝试了Session(),这次成功了!我本来应该做些傻事的 class Role(db.Model): __tablename__ = 'roles' id

我在ORM模型中有三个类,它们之间有一对多的关系。如何使用孙子类('Login')中的hybrid_属性获取祖父母('Role')的'name'属性

更新: 我在flask admin视图的“column_list”中使用新属性“user”。 我尝试了db.session而不是Sessions,但失败了。我再次尝试了Session(),这次成功了!我本来应该做些傻事的

class Role(db.Model):
    __tablename__  = 'roles'
    id       = db.Column(db.Integer(),  primary_key=True)
    name     = db.Column(db.String(50))
    users    = db.relationship('User')

class User(db.Model):
    __tablename__  = 'users'
    id       = db.Column(db.Integer(),  primary_key=True)
    role_id  = db.Column(db.Integer(), db.ForeignKey('roles.id'))
    role     = db.relationship("Role", back_populates="users")
    logins   = db.relationship('Login')

class Login(db.Model):
    __tablename__  = 'logins'
    id           = db.Column(db.Integer(),  primary_key=True)
    user_id      = db.Column(db.Integer(), db.ForeignKey('users.id'))
    user         = db.relationship("User", back_populates="logins")

    @hybrid_property
    def user(self):
        return self.user.role.name

    @user.expression
    def user(cls):
         ???query = Session().query(Role.name).join(Role.users).filter(User.id==cls.user_id).label('user')
         return query

我回答我的问题,它可能会帮助别人。我发现了这个问题,并找到了一个简单的解决方法。
失败的原因是在登录表视图的flask admin的“column\u searchable\u list”中具有混合属性“user”。我将其从列表中删除,原始代码正常工作。

您如何使用该属性?快速浏览一下,您似乎正在创建一个相关的标量子查询。由于您使用的是Flask SQLAlchemy,因此可以使用线程本地会话
db.session
,而不是创建一个。感谢您的评论。我更新了我的问题,实际上我的代码这次起作用了!出于兴趣,如何使用
db.session
失败?我在其他地方看到过,我在sqlalchemy的网站上也认为,对于“表达式”,不能使用db.session。错误是
未找到任何应用程序。在查看功能内工作或按
。啊,正确。不要忘记Flask SQLA提供的会话有一些定制。