3

既存のDBをマッピングする2つの単純なクラスがあります。

class File(object):
  __storm_table__ = 'files'
  fid = Int(primary=True)
  filename = Unicode()

class FileDownload(object):
  __storm_table__ = 'filefield_track'
  did = Int(primary=True)
  fid = Int()
  email = Unicode()
  date = DateTime()

  trackedfile = Reference(fid, File.fid)

File.filedownloads = ReferenceSet(File.fid, FileDownload.fid)

File空でないセットを持つすべてのオブジェクトを見つけられるようにしたいだけですFile.filedownloadsFileこれは、すべてのオブジェクトをクエリし、フィールドを手動でフィルタリングするだけでPythonで実行できますが、File.filedownloadsこれを実行するためのよりクリーンな方法があると思いました(これは機能しません:)):

store.find(File, File.filedownloads != None)
store.find(File, File.filedownloads.count() != 0)

私は最初のものがSQLAlchemyで動作することを知っています:

session.query(File).filter(File.filedownloads != None)
4

1 に答える 1

1

内部 ID を処理する「汚い」回避策を見つけることができました (fid)

# Find all files that have been downloaded
subselect = Select(FileDownload.fid, distinct=True)
for f in store.find(File, File.fid.is_in(subselect)):
    print(f.filename, f.filedownloads.count())
于 2013-01-02T13:02:27.057 に答える