一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 淺析python中SQLAlchemy排序的一個坑

淺析python中SQLAlchemy排序的一個坑

2020-09-22 08:55Just 做 IT Python

這篇文章主要介紹了關于python中SQLAlchemy排序的一個坑,文中給出了詳細的示例代碼,需要的朋友可以參考借鑒,感興趣的朋友們下面來一起學習學習吧。

前言

SQLAlchemy是Python編程語言下的一款ORM框架,該框架建立在數據庫API之上,使用關系對象映射進行數據庫操作,簡言之便是:將對象轉換成SQL,然后使用數據API執行SQL并獲取執行結果。最近在使用SQLAlchemy排序遇到了一個坑,所以想著總結下來,分享給更多的朋友,下面來一起看看吧。

坑的代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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()

不坑的代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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()

對,你沒看錯,就是那個橫杠,拉慢速度。改成 desc() 函數速度能提高10倍

下面附上一個 sqlalchemy 高性能隨機取出若干條數據

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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()

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产99视频精品免视看7 | 青青草在线观看 | 亚洲成a人片777777久久 | 日本公与妇中文在线 | 国产视频a区| 楚乔传第二部免费播放电视连续剧 | 美女艹b| 人与动videos| 福利国模私拍视频在线观看 | 亚洲国产精品久久精品成人网站 | 欧洲破处 | 色天天综合色天天看 | 韩国三级年轻的小婊孑 | 国产香蕉一区二区在线观看 | 亚洲精品成人A8198A片漫画 | 九九国产在线视频 | 91精品啪在线观看国产线免费 | 97综合 | 久久成人永久免费播放 | 奇米777狠狠 | 国产成人综合亚洲一区 | 国产成人在线视频播放 | 亚洲第五页 | 高h生子双性美人受 | 99福利视频导航 | 五月婷婷丁香色 | 欧美一级一级做性视频 | 美女插插视频 | blacked最大的吊 | 校花被扒开尿口折磨憋尿 | video one 中国按摩| 亚洲黄色网页 | 3d动漫被吸乳羞羞 | 亚洲欧美日韩国产一区二区精品 | 性bbbbwwbbbb| 欧美成a人片免费看久久 | 亚洲码和乱人伦中文一区 | 91在线精品视频 | 成人123| 调教开发新婚娇妻放荡 | 天天澡夜夜澡狠狠澡 |