質問

これは何のDjango文のApp Engineの同等のでしょうか?

return Post.objects.get(created_at__year=bits[0], 
                            created_at__month=bits[1], 
                            created_at__day=bits[2],
                            slug__iexact=bits[3])

私はこれを書いて終わってきました

Post.gql('WHERE created_at > DATE(:1, :2, :3) AND created_at < DATE(:1, :2, :4) and slug = :5',
    int(bit[0]), int(bit[1]), int(bit[2]), int(bit[2]) + 1, bit[3])

しかし、それはDjangoのに比べてかなり恐ろしいです。他の多くのPython的/ジャンゴ - 魔法の方法、例えばPost.filter()またはcreated_at.day/month/year属性を持つ?

役に立ちましたか?

解決

あなたは「relativedelta」を必要としない - あなたはdatetime.timedeltaで記述するもの。そうでない場合は、あなたの答えはよさそうだ。

そしてレコードがない総データストアのサイズ、返さにそれらのすべてが比例スケール -

限り処理時間が経つにつれて、App Engineのいいところは、ほぼすべてのクエリが同じ単価結果を持っているということです。そのように、あなたのソリューションが正常に動作します。

あなたが何か他のもののためにあなたの1つの不等式フィルタを必要とする場合は、

代わりに、あなたは「created_day」DatePropertyを追加し、その上の単純な等価性チェックを行うことができます。

他のヒント

どの程度

from datetime import datetime, timedelta

created_start = datetime(year, month, day)
created_end = created_start + timedelta(days=1)
slug_value = 'my-slug-value'

posts = Post.all()
posts.filter('created_at >=', created_start)
posts.filter('created_at <', created_end)
posts.filter('slug =', slug_value)

# You can iterate over this query set just like a list
for post in posts:
    print post.key()

relativedeltaライブラリを使用して+はまだありませんあまりにもPython的ものの、少しより快適に書いて、非常に乾燥機にあるjQueryのスタイルでフィルタを、連鎖することになりました。 :)それはより多くのデータベース処理時間がおそらく必要だろうと、それは、それを行うための最善の方法かどうまだわからない?

date = datetime(int(year), int(month), int(day))
... # then
queryset = Post.objects_published()
                            .filter('created_at >=', date)
                            .filter('created_at <', date + relativedelta(days=+1))
                            ...

object_detailビューまたはさらに別のフィルタにスラグを渡す。

あなたはdatetime.timedeltaを使用することができところで。つまり、日付範囲または日付デルタを見つけることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top