Как сказал @letitbee, рекомендуется назначать первичные ключи таблицам и правильно определять отношения, чтобы обеспечить надлежащие запросы ORM. Как говорится ...
Если вы заинтересованы в написании запроса в виде:
SELECT
user.email,
user.name,
document.name,
documents_permissions.readAllowed,
documents_permissions.writeAllowed
FROM
user, document, documents_permissions
WHERE
user.email = "user@email.com";
Тогда вы должны пойти на что-то вроде:
session.query(
User,
Document,
DocumentsPermissions
).filter(
User.email == Document.author
).filter(
Document.name == DocumentsPermissions.document
).filter(
User.email == "user@email.com"
).all()
Если вместо этого вы хотите сделать что-то вроде:
SELECT 'all the columns'
FROM user
JOIN document ON document.author_id = user.id AND document.author == User.email
JOIN document_permissions ON document_permissions.document_id = document.id AND document_permissions.document = document.name
Тогда вы должны сделать что-то вроде:
session.query(
User
).join(
Document
).join(
DocumentsPermissions
).filter(
User.email == "user@email.com"
).all()
Одна записка об этом ...
query.join(Address, User.id==Address.user_id) # explicit condition
query.join(User.addresses) # specify relationship from left to right
query.join(Address, User.addresses) # same, with explicit target
query.join('addresses') # same, using a string
Для получения дополнительной информации посетите документы .