2

Pythonの日付を使用して、日ごとにmySQLでデータを取得するにはどうすればよいですか? day1私が欲しいと言ってday2(またはその翌日day1)、n回繰り返します

したがって、「where」SQLステートメントの日付が、各反復で以下のリストのようになる必要があります(n回 )

day1 >= '2012-01-01'  and  day2 < '2012-01-02'    ( n = 1 )
day1 >= '2012-01-02'  and  day2 < '2012-01-03'    ( n = 2 )
.
.
day1 >= yesterday    and day2  < today            ( n times ) 

.

Start_date = '2012-01-01'   <- How can I write this in python
End_date = Today()   <- and this 

書くように:

for each iteration ..
    con.execute("select * from table where date >= day1 and date < day2" )
4

3 に答える 3

5

モジュール化する必要がありdatetimeます:-

import datetime
start = datetime.date(2012,01,01) 
next = start + datetime.date.resolution

while next <= datetime.date.today():
    print start, next

    con.execute("""
        select * from table where date >= %s and date < %s
    """, (start, next))

    start = next
    next = start + datetime.date.resolution

重要なお知らせ:重大な問題を修正するために回答を更新しました。SQL インジェクションなどの深刻な問題が発生する可能性があるため、SQL クエリの作成に文字列形式 (別名) を使用しないでください。ほぼすべての RDMBes が同じ構文を提供する APIを使用する%Python-<db_driver>

execute("select * from blah where x=%s AND y=%s", (x, y))
                                     ^       ^  ^
                                     1       1  2

1] 引用なし、
2] 文字列フォーマットなし

于 2012-09-21T16:08:32.457 に答える
2

datetime関数でクラスを使用しstrftimeます。

このdatetimeクラスは、特定の日付と時刻を表すオブジェクトを構築するために使用されます。関数はstrftime、選択したフォーマットに従って、特定の文字列に変換します。

MySQL のドキュメントによると、標準の日時フォーマットはYYYY-MM-DD HH:MM:SS.

動作するはずの例を次に示します。

day1 = datetime.datetime(2012, 1, 1).strftime('%Y-%m-%d %H:%M:%S')
day2 = datetime.datetime(2012, 1, 2).strftime('%Y-%m-%d %H:%M:%S')
con.execute("select * from table where date >= %s and date < %s", (day1, day2))

追加のクエリを作成する場合datetime.datetimeは、ループの各ラウンドで適切なオブジェクトを作成するだけです。例えば:

for i in xrange(1, 10):
    # ...
    day2 = datetime.datetime(2012, 1, i).strftime('%Y-%m-%d %H:%M:%S')
    # ...
于 2012-09-21T16:01:30.977 に答える
1

datetime.dateオブジェクトを使用します。それらを使用すると、次のことができるため、それらは素晴らしいものです。

  • 今日は簡単に計算できます ( dt.date.today()),
  • 翌日を簡単に計算 ( start + dt.timedelta(days = 1),
  • 日付を比較する (例: start < end)
  • に直接フィードしますcon.execute。文字列として事前にフォーマットする必要はありません。

import datetime as dt
start = dt.date(2012,1,1)
end = dt.date.today()

while start < end:
    nextday = start + dt.timedelta(days = 1)
    con.execute("select * from table where date >= %s and date < %s",
                (start, nextday))

    start = nextday
于 2012-09-21T16:02:30.357 に答える