2

Python 2.7 で SQL クエリを管理するための Python のラッパーである SQLObject を使用しています。次のような辞書を使用してデータを選択できることを知っています。

restrictions = { ... }
selection = sql_table.selectBy(**restrictions).orderBy('-createdtime')

次のようにして日付を照会することもできます。

selection = sql_table.select(sql_table.q.creatdtime>=datetime.datetime(year, month, day, 0, 0, 0, 0)

ただし、両方を一緒に使用して、日付と辞書のペアで並べ替えたいと考えています。それらを次のようにまとめようとすると、次のようになります。

selection = sql_table.select(**restrictions, sql_table.q.creatdtime>=datetime.datetime(year, month, day, 0, 0, 0, 0)

うまくいきません。日時の範囲と辞書の組み合わせで SQL クエリをフィルタリングする方法はありますか?

4

1 に答える 1

2

問題を修正しました。ここで同じ問題に直面している場合の解決策は次のとおりです。

Python の SQLObject ラッパーは直接の SQL クエリの入力をサポートしているため、自分で作成することにしました。まず、すべての制限をクエリとして展開します

select_string = " AND ".join(str(key) + "=" + str(restrictions[key]) for key in restrictions.keys())

次に、日付に基づいて制限を追加したいと考えました。日付と時刻を格納するデータベースの列がcreatedtimeと呼ばれることを知っていたので、文字列を次のように配置しました

select_string += " AND " + 'createdtime>=' + '"' + str(datetime.datetime(year, month, day, 0, 0, 0, 0)) + '"'

datetime オブジェクトは引用符で囲まれていることに注意してください。文字列としてキャストされている場合でも、機能するには引用符が必要です。

したがって、私の最終的なコードは次のようになります。

select_string = " AND ".join(str(key) + "=" + str(restrictions[key]) for key in restrictions.keys())
if date1:
    select_string += " AND " + 'createdtime>=' + '"' + str(datetime.datetime(year, month, day, 0, 0, 0, 0)) + '"'
if date2:
    select_string += " AND " + 'createdtime<=' + '"' + str(datetime.datetime(year2, month2, day2, 0, 0, 0, 0)) + '"'
selection = sql_table.select(select_string).orderBy('-createdtime')
return selection
于 2016-08-25T17:31:33.157 に答える