Maison >développement back-end >Tutoriel Python >Décrivez brièvement une erreur courante lors du tri dans SQLAlchemy
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!