Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy使用contains在循环中生成查询_Python_Sql_Flask_Sqlalchemy - Fatal编程技术网

Python SQLAlchemy使用contains在循环中生成查询

Python SQLAlchemy使用contains在循环中生成查询,python,sql,flask,sqlalchemy,Python,Sql,Flask,Sqlalchemy,我正在Flask中构建一个web应用程序,它涉及到一些SQLAlchemy。我有一个函数“get_team()”让我发疯 def get_team(playerlist) cond = and_(*[Team.users.contains(p) for p in playerlist ]) q = Team.query.filter(cond) ... def get_团队(玩家列表) cond=和(*[Team.users.contains(p

我正在Flask中构建一个web应用程序,它涉及到一些SQLAlchemy。我有一个函数“get_team()”让我发疯

def get_team(playerlist) cond = and_(*[Team.users.contains(p) for p in playerlist ]) q = Team.query.filter(cond) ... def get_团队(玩家列表) cond=和(*[Team.users.contains(p)表示playerlist中的p]) q=团队.query.filter(cond) ... 我不断收到错误:“AttributeError:'unicode'对象没有属性'\u sa\u instance\u state'。以下是模型的外观:

class Team(db.Model): __tablename__ = 'teams' id = db.Column(db.Integer, primary_key=True) users = association_proxy("user_associations", "user", creator=lambda u: Teaming(user=u)) def __repr__(self): s = "" for u in self.users: s = s + u.username + ", " return "Team {tid}: {users_string}".format(tid = self.id, users_string=s) class Teaming(db.Model): __tablename__ = 'teaming' 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("User", backref="team_associations") team = db.relationship("Team", backref="user_associations") def __repr__(self): return "".format(uid = self.user_id, tid = self.team_id) class User(UserMixin, db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(64), unique=True, index=True) username = db.Column(db.String(64), unique=True, index=True) password_hash = db.Column(db.String(128)) confirmed = db.Column(db.Boolean, default=False) teams = association_proxy("team_associations", "team", creator = lambda t: Teaming(team=t)) 班级团队(db.Model): __tablename_uuu=‘团队’ id=db.Column(db.Integer,主键=True) 用户=关联\代理(“用户\关联”,“用户”,创建者=lambda u:Teaming(用户=u)) 定义报告(自我): s=“” 对于u-in-self.users: s=s+u.username+“,” 返回“Team{tid}:{users\u string}”。格式(tid=self.id,users\u string=s) 班级合作(db.Model): __tablename_uuu='teaming' team\u id=db.Column(db.Integer,db.ForeignKey('teams.id'),primary\u key=True) user\u id=db.Column(db.Integer,db.ForeignKey('users.id'),primary\u key=True) 用户=数据库关系(“用户”,backref=“团队协会”) 团队=数据库关系(“团队”,backref=“用户协会”) 定义报告(自我): 返回“”。格式(uid=self.user\u id,tid=self.team\u id) 类用户(UserMixin,db.Model): __tablename_uu='users' id=db.Column(db.Integer,主键=True) email=db.Column(db.String(64),unique=True,index=True) username=db.Column(db.String(64),unique=True,index=True) 密码\u hash=db.Column(db.String(128)) 已确认=db.Column(db.Boolean,默认值=False) 团队=协会\代理(“团队\协会”,“团队”,创建者=lambda t:团队(团队=t))
任何方向都将不胜感激

最可能的原因是
playerlist
不是
User
实例的列表,而是一些字符串(可能是名称)<代码>包含仅适用于模型实例。如果要使用其他属性,请使用
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()