SQLAlchemy 在包含的循环中生成查询
Posted
技术标签:
【中文标题】SQLAlchemy 在包含的循环中生成查询【英文标题】:SQLAlchemy generating query in loop with contains 【发布时间】:2014-10-31 23:50:53 【问题描述】:我正在 Flask 中构建一个涉及一些 SQLAlchemy 的 Web 应用程序。我有一个函数“get_team()”让我发疯。
def get_team(玩家列表) cond = and_(*[Team.users.contains(p) for p in playerlist ]) q = Team.query.filter(cond) ...我不断收到错误消息:“AttributeError: 'unicode' object has no attribute '_sa_instance_state'”。模型如下所示:
班级团队(db.Model): __tablename__ = '团队' id = db.Column(db.Integer, primary_key=True) users = association_proxy("user_associations", "user", creator=lambda u: Teaming(user=u)) def __repr__(self): s = "" 为你在 self.users 中: s = s + u.username + ", " return "团队 tid: users_string".format(tid = self.id, users_string=s) 班组(db.Model): __tablename__ = '合作' team_id = db.Column(db.Integer, db.ForeignKey('teams.id'), primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True) user = db.relationship("用户", backref="team_associations") team = db.relationship("团队", backref="user_associations") def __repr__(self): return "".format(uid = self.user_id, tid = self.team_id) 类用户(UserMixin,db.Model): __tablename__ = '用户' id = db.Column(db.Integer, primary_key=True) 电子邮件 = db.Column(db.String(64),唯一 = True,索引 = True) 用户名 = db.Column(db.String(64),唯一 = True,索引 = True) password_hash = db.Column(db.String(128)) 确认 = db.Column(db.Boolean, default=False) 团队 = 关联代理(“团队关联”,“团队”,创建者 = lambda t:团队(团队 = t))任何方向将不胜感激!
【问题讨论】:
【参考方案1】:最可能的原因是playerlist
不是User
实例的列表,而是一些字符串(可能是名称)。 contains
仅适用于模型实例。如果您想使用其他属性,请使用any
。
def get_team_of_players(playerlist):
cond = and_(*[Team.users.contains(p) for p in playerlist])
q = Team.query.filter(cond)
return q
p1, p2 = db.session.query(User).get(1), db.session.query(User).get(2)
q = get_team_of_players([p1, p2]).all()
def get_team_of_usernames(usernames):
cond = and_(*[Team.users.any(User.username == p) for p in usernames])
q = Team.query.filter(cond)
return q
p1, p2 = 'user1', 'user2'
q = get_team_of_usernames([p1, p2]).all()
【讨论】:
以上是关于SQLAlchemy 在包含的循环中生成查询的主要内容,如果未能解决你的问题,请参考以下文章
在 SQLAlchemy 中查询 SQL Server JSON