2016-12-05 45 views
0

我正在研究一個web2py應用程序,它允許用戶添加和刪除播放列表中的曲目,然後從播放列表中添加和刪除播放列表。Web2py:如何在數據庫上創建播放列表結構並顯示它們

我的表是這樣的:

db.define_table('track', 
      Field('artist'), 
      Field('album'), 
      Field('title'), 
      Field('duration', 'float'), 
      Field('rating', 'float'), 
      Field('num_plays', 'integer'), 
      Field('created_by', default=get_user_email()), 
      Field('created_on', default=datetime.datetime.utcnow()), 
      Field('track_source',default='manual'), 
      Field('track_uri') 
      ) 

db.define_table('playlist', 
      ...... 
      ) 

如何定義我的播放列表表爲包括標題和鏈接到該播放列表中的所有曲目?

回答

1

你有兩種選擇。最靈活的方式來創建第三個錶鏈接曲目和播放列表一個many-to-many relationship

db.define_table('playlist_tracks', 
    Field('playlist', 'reference playlist'), 
    Field('track', 'reference track')) 

上述方法可以最靈活的查詢方面,你可以舉例來說,輕鬆查詢到,或者如何許多播放列表給定的曲目屬於。

更簡單的方法是將list:reference字段添加到播放列表表:

db.define_table('playlist', 
    Field('tracks', 'list:reference'), ...) 

list:reference的做法是好的,如果你的查詢只限於檢索播放列表和它們相關聯的軌道的單件或小數目,但與軌道或大量播放列表和軌道相關的更復雜的查詢可能變得效率低下。

+0

感謝您的回覆!我的api代碼將如何添加曲目給你給我的第二個選項? – user2030942

+0

很難說,不知道你的API代碼現在是什麼樣子,但是一般來說,'list:reference'字段帶有一個記錄ID列表:'db.playlist.insert(...,tracks = [1,2,3 ,4,5])',其中1,2,3,4,5是來自'db.track'表的'id'字段的值。 – Anthony

+0

我的API代碼如下: db.define_table( '軌道', ..... ) db.define_table( '播放列表',...... ) db.define_table ('playlist_reference', Field('playlist','reference playlist'), Field('track','reference track') ) 例如,我將如何能夠檢索播放列表中的所有曲目標題x? – user2030942

相關問題