Heim > Artikel > Backend-Entwicklung > Fallstricke der SQLAlchemy-Sortierung in Python
Vorwort
SQLAlchemy ist ein ORM-Framework unter der Programmiersprache Python. Das Framework basiert auf der Datenbank-API und verwendet relationale Objektzuordnung für Datenbankoperationen Die einfache Sache ist: Konvertieren Sie das Objekt in SQL und verwenden Sie dann die Daten-API, um SQL auszuführen und die Ausführungsergebnisse zu erhalten. Kürzlich bin ich bei der Verwendung der SQLAlchemy-Sortierung auf eine Falle gestoßen, daher wollte ich sie zusammenfassen und mit weiteren Freunden teilen.
Schlechter Code
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()
Kein Fehlercode
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()
Ja, Sie haben richtig gelesen, es ist dieser horizontale Balken, machen Sie langsamer. Durch den Wechsel zu desc()
kann die Funktionsgeschwindigkeit um das Zehnfache erhöht werden.
Im Anhang finden Sie eine hochleistungsfähige zufällige Extraktion mehrerer Daten durch sqlalchemy
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()
Weitere Artikel zu den Fallstricken der SQLAlchemy-Sortierung in Python finden Sie auf der chinesischen PHP-Website!