2017-09-30 5 views
0

Par exemple:Comment combiner CASE et EXISTS dans SQL Alchemy?

SELECT 
    CASE WHEN EXISTS (
    SELECT 
     * 
    FROM 
     "Teaching" 
    WHERE 
     "Teaching".student_idn = "Student".idn 
) THEN 'Teaching Assistant' ELSE 'Student' END AS "Category" 
FROM 
    "Student" 

Comment cela peut-il être écrit dans SQL Alchemy? J'ai été capable de comprendre comment CASE peut être fait. Mais ça devient complexe quand nous avons besoin EXISTS

+1

De nombreuses façons. Il y a la construction de base ['exists()'] (http://docs.sqlalchemy.org/en/latest/core/selectable.html#sqlalchemy.sql.expression.exists), [l'équivalent de l'API de requête] (http: //docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.exists) et le [raccourci des propriétés de la relation] (http://docs.sqlalchemy.org/fr/latest /orm/tutorial.html#using-exists). Donc la réponse dépend de votre code existant. –

+1

Peut-être même regarder une propriété hybride et filtrer sur cela ... (selon le niveau que vous utilisez sqla à) –

Répondre

0

L'approche suivante fonctionne:

sub = session.query(Teaching).filter(Teaching.columns.student_idn == Student.columns.idn) 

query = session.query(Student.columns.name, case([(sub.exists(), "Teaching Assistant")], else_ = "Student") 
) 

Il y a probablement de meilleures façons.