Maison > développement back-end > Tutoriel Python > Pièges du tri SQLAlchemy en python

Pièges du tri SQLAlchemy en python

高洛峰
Libérer: 2017-02-27 09:44:26
original
1824 Les gens l'ont consulté

Avant-propos

SQLAlchemy est un framework ORM sous le langage de programmation Python. Le framework est construit sur l'API de base de données et utilise le mappage d'objets relationnels pour les opérations de base de données. la chose simple est : convertissez l'objet en SQL, puis utilisez 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 médiocre

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 sans défaut

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, ralentissez. Passer à desc() peut augmenter la vitesse de la fonction 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

Pour plus d'articles liés aux pièges du tri SQLAlchemy en python, veuillez faire attention au site Web PHP 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