2009-08-14 9 views
0

誰でも私を次の問題で助けてくれるチュートリアル、コード、または何らかのリソースに変えることができますか?Django - SQLクエリ - タイムスタンプ

私はmySQLデータベースにテーブルを持っています。それは、ID、タイムスタンプ、別のIDと値を含んでいます。私は一意のデータを識別できる「メイン」IDを渡しています。しかし、私はタイムスタンプフィールドを使用してこのデータの部分で時間検索を行いたいです。したがって、理想と言えるのは、12時から1時の間に、ID = 1987のログに記録されているすべての値を表示することです。

これをDjangoでどのように調べることができますか?私は、それが/よりも大きいものよりも小さくなるようなものをmySQLで知っています...しかし、私はDjangoでこれを行うことについてどうやって行くでしょうか?私はObject.Filterを使用して、これまでのほとんどのデータベース処理を行ってきました。最後に、私はDjangoを初めて使ったことを強調したいと思います。私は本当に困っています!

+0

テーブルのコードを投稿してください。 –

+0

分の仕事で不運にも私のファイルを持っていない!私は月曜日に来る答えをテストします! – Federer

答えて

2

Vinay Sajipの答えが正しいとは思わない。彼のコードに基づいて、最も近い正しい変異体である:

MyModel.objects.filter(
         primaryid=1987 
        ).exclude(
         timestamp__lt=min_timestamp 
        ).exclude(
         timestamp__gt=max_timestamp 
        ).values_list('valuefield', flat=True) 

「最小のタイムスタンプよりも小さいものを除外した最大のタイムスタンプよりも大きいものを除外します。」また、あなたはこれを行うことができます。

MyModel.objects.filter(
         primaryid=1987 
        ).filter(
         timestamp__gte=min_timestamp 
        ).exclude(
         timestamp__gte=max_timestamp 
        ).values_list('valuefield', flat=True) 

は()とフィルタを()除外されている反対を:除外()が同定行とフィルタを省略し()、それらを含んでいます。あなたが好きなものを含めたり除外したりするためにそれらの組み合わせを使うことができます。あなたの場合、最小タイムスタンプ以下のものを除外したいし、最大タイムスタンプ以上のものを除外したい()。

ここにはchaining QuerySet filtersに関するドキュメントがあります。

+0

は魅力的に働いた!ありがとうございました! – Federer

+0

おっと!それは実際には機能しません。それは私が指定したタイムスタンプを除外します。フィールドが自分のデータベースにないというエラーが表示されます。元の投稿にあるように、値を指定するタイムスタンプフィールドは1つしかありません。したがって、答えは間違っています。 – Federer

+0

いいえ、私は自分自身をもう一度修正します。私は二重アンダースコアを含んでいませんでした、ただ一つ!もう一度、ありがとう! :) – Federer

3

テーブルがDjangoモデルMyModelにマップされている場合、

class MyModel(models.Model): 
    ... 
    primaryid = ... 
    timestamp = ... 
    secondaryid = ... 
    valuefield = ... 

あなたはこれが<min_timestamp><max_timestamp>間のタイムスタンプの値と、primaryid 1987でエントリを選択し、リスト内の対応する値を返します

MyModel.objects.filter(
         primaryid=1987 
        ).exclude(
         timestamp__lt=<min_timestamp> 
        ).exclude(
         timestamp__gt=<max_timestamp> 
        ).values_list('valuefield', flat=True) 

使用することができます。

更新:クエリの不具合を修正しました(filter - >exclude)。

+0

ちょっと、ヴィネイ、私はこれをあなたのものに基づいているので、私はこれをアップボードしています。ありがとう! – hughdbrown

+0

ええ、私は2番目のタイムスタンプフィルターを鳴らしました。それを見つけていただきありがとうございます! –

関連する問題