Maison > Article > développement back-end > Pièges du tri SQLAlchemy en python
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()
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()
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()
Pour plus d'articles liés aux pièges du tri SQLAlchemy en python, veuillez faire attention au site Web PHP chinois !