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

Y2J
Libérer: 2017-05-08 16:23:59
original
1245 Les gens l'ont consulté

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()
Copier après la connexion

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()
Copier après la connexion

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()
Copier après la connexion

[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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!