Maison  >  Article  >  développement back-end  >  Décrivez brièvement une erreur courante lors du tri dans SQLAlchemy

Décrivez brièvement une erreur courante lors du tri dans SQLAlchemy

Y2J
Y2Joriginal
2017-05-08 16:23:591273parcourir

Cet article présente principalement un piège concernant le tri SQLAlchemy en python. L'article donne un exemple de code détaillé. Les amis qui en ont besoin peuvent s'y référer. Les amis intéressés peuvent venir apprendre ensemble.

Avant-propos

SQLAlchemy est un ORMframeworksous le Pythonlangage de programmation, qui est construit sur la base de donnéesAPI, utilisez le mappage relationobjet pour effectuer des opérations de base de données, en bref : convertir l'objet en SQL, puis utiliser l'API de données pour exécuter le SQL et obtenir les résultats de l'exécution . Récemment, j'ai rencontré un piège lors de l'utilisation du tri SQLAlchemy, j'ai donc voulu le résumer et le partager avec plus d'amis. Jetons un coup d'œil ci-dessous.

Code de triche

query = db_session.query(UserVideo.vid,
         UserVideo.uid,
         UserVideo.v_width,
         UserVideo.v_height,
         UserVideo.create_time,
         UserVideo.cover,
         UserVideo.source_url,
         UserVideo.v_type,
         UserVideo.category,
         User.username,
         User.sex,
         UserExtraInfo.avatar,
         UserExtraInfo.watermark)
  query = query.filter(UserVideo.status == 1,
        User.uid == UserVideo.uid,
        UserExtraInfo.uid == UserVideo.uid) 
  query = query.filter(UserVideo.status == 1)
  query = query.order_by(-UserVideo.vid)
  query = query.limit(20).all()

Code qui ne triche pas

query = db_session.query(UserVideo.vid,
         UserVideo.uid,
         UserVideo.v_width,
         UserVideo.v_height,
         UserVideo.create_time,
         UserVideo.cover,
         UserVideo.source_url,
         UserVideo.v_type,
         UserVideo.category,
         User.username,
         User.sex,
         UserExtraInfo.avatar,
         UserExtraInfo.watermark)
  query = query.filter(UserVideo.status == 1,
        User.uid == UserVideo.uid,
        UserExtraInfo.uid == UserVideo.uid) # .order_by(UserVideo.vid.desc()).limit(20).all()
  query = query.filter(UserVideo.status == 1)
  query = query.order_by(UserVideo.vid.desc())
  query = query.limit(20).all()

Oui, vous avez bien lu, C'est cette barre horizontale, ralentis. Passer à la fonction desc() peut augmenter la vitesse de 10 fois

Vous trouverez ci-dessous une extraction aléatoire haute performance sqlalchemy de plusieurs éléments de données

query = db_session.query(UserVideo.vid,
          UserVideo.uid,
          UserVideo.v_width,
          UserVideo.v_height,
          UserVideo.create_time,
          UserVideo.cover,
          UserVideo.source_url,
          UserVideo.v_type,
          UserVideo.category,
          User.username,
          User.sex,
          UserExtraInfo.avatar,
          UserExtraInfo.watermark)
   query = query.filter(UserVideo.status == 1, User.uid == UserVideo.uid, UserExtraInfo.uid == UserVideo.uid)
rvid = db_session.query(func.round(random.random() * func.max(UserVideo.vid)).label('rvid')).subquery()
query = query.filter(UserVideo.category == category)
query_tail = query
query_tail = query_tail.join(rvid, UserVideo.vid > rvid.c.rvid).limit(20).all()

[Recommandations associées]

1. Tutoriel vidéo gratuit Python

2. Vidéo orientée objet Python

3. Manuel d'apprentissage Python

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn