0
votes

Comment appliquer une partie distincte sur une seule partie du champ DateTime dans SQLalchemy Python?

Je dois interroger ma base de données et renvoyer le résultat en appliquant une partie distincte sur la seule partie de la date du champ DateTime.

Mon code est le suivant: p>

 Query error - {'error': ProgrammingError('(psycopg2.errors.InvalidColumnReference) SELECT DISTINCT ON expressions must match initial ORDER BY expressions\nLINE 2: FROM (SELECT DISTINCT ON (CAST(tenant_resson.capture.capture...\n                                  ^\n',)


0 commentaires

3 Réponses :


0
votes

Je ne connais pas sqlalchemy code> mais cette requête résultante fonctionne comme vous attendez. S'il vous plaît noter le distinct sur. Peut-être qu'il y a un moyen dans sqlalchemy code> pour exécuter des requêtes paramétrées non triviales? Cela vous donnerait la prestation supplémentaire de pouvoir tester et optimiser la requête initiale.

SELECT DISTINCT ON (CAST(tenant_resson.capture.capture_datetime AS DATE))
  CAST(tenant_resson.capture.capture_datetime AS DATE) AS event_date,
  tenant_resson.capture.tags -> %(tags_1)s AS visibility
FROM tenant_resson.capture
WHERE tenant_resson.capture.field_id = %(field_id_1)s;


1 commentaires

En fait, je cherche la requête Sqlalchemy.



0
votes

La requête postée par @ Stefanov.sm est correcte. En termes SQLalchemy, il serait xxx

voir le docs pour plus d'informations


0 commentaires

0
votes

Je devais ajouter de la commande_by à ma requête. Maintenant, cela fonctionne bien.

query = session.query(
            cast(Capture.capture_datetime, Date).label('event_date'),
            Capture.tags['visibility'].label('visibility')
        ).filter(Capture.field_id == parse_uuid(field_id)) \
        .distinct(cast(Capture.capture_datetime, Date)) \
        .order_by(cast(Capture.capture_datetime, Date).desc())


0 commentaires