Ich versuche, eine SQL-Abfrage in eine SQLAlchemy-Abfrage zu Benutzer innerhalb get API zu konvertieren. Das Problem ist, dass ich nichts aus der Zuordnungstabelle abfragen kann. (Ich bin mir sicher, dass ich die Methode nicht kenne).Wie frage ich eine Zuordnungstabelle in SQLAlchemy?
ORM:
roles_users = db.Table(
'roles_users',
db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))
)
class Role(db.Model, RoleMixin):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(50), unique=True)
description = db.Column(db.String(255))
def __str__(self):
return self.name
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String(50))
last_name = db.Column(db.String(50))
email = db.Column(db.String(50), unique=True)
password = db.Column(db.String(255))
.
.
.
roles = db.relationship('Role', secondary=roles_users,
backref=db.backref('users', lazy='dynamic'))
def __str__(self):
return self.email
Arbeits SQL-Abfrage:
select first_name, last_name, role.name from user
join roles_users
join role on user.id = roles_users.user_id
and role.id = roles_users.role_id;
SQLAlchemy Abfrage, die ich habe Probleme mit:
roles_users.query.join(Role).join(User)
.filter(roles_users.user_id == User.id and
roles_users.role_id == Role.id).all()
Fehler, die ich verwende oben SQLAlchemy Abfrage erhalten:
AttributeError: 'Table' object has no attribute 'query'
Wie führe ich das Äquivalent von meiner SQL-Abfrage mit SQLAlchemy?
Der boolean 'und' sollte binär' & ', oder Sie werden überraschende Ergebnisse erhalten werden. Sie können auch die 'and_' Funktion von sqla verwenden. In diesem Fall ist die linke Seite "truthy" (ein sql-Ausdrucksobjekt), so dass der boolesche Ausdruck auf der rechten Seite "roles_users.c.role_id == Role.id" ausgewertet wird. –
Bei Verwendung von '&' linken und rechten Seiten muss in Klammern 'Filter ((roles_users.c.user_id == User.id) & (roles_users.c.Role_ID == Role.id))' –