4

'2012-09-10 00:00:00-05:00'MySQLクエリに渡しています。この値は、Python用のpytzモジュールを使用して取得されます。

import pytz
class MyClass():
    def __init____(self):
        self.tz = pytz.timezone(settings.TIME_ZONE)
        todaystart = self.tz.localize(datetime.now(self.tz).replace(hour=0, minute=0, second=0, microsecond=0, tzinfo=None), is_dst=None).astimezone(self.tz)

MySQLクエリは、次のtodaystartように置き換えられた後、これです。

SELECT * FROM mytable WHERE created > UNIX_TIMESTAMP(STR_TO_DATE('2012-09-10 00:00:00-05:00','%Y-%m-%d %k:%i:%s') - INTERVAL 1 DAY);

このクエリを直接実行すると、期待どおりにデータが返されます。このクエリをコードに入れると、次のエラーが発生します。Warning: Truncated incorrect datetime value: '2012-09-09 00:00:00-05:00'

私が使用しているコードは次のとおりです(Django内):

query = """SELECT * FROM mytable WHERE created > UNIX_TIMESTAMP(STR_TO_DATE('2012-09-10 00:00:00-05:00','%Y-%m-%d %k:%i:%s') - INTERVAL 1 DAY);"""
myCursor = connections[system_db].cursor()
results = myCursor.execute(query)    # Dies on this statement
resultcount = results.fetchall()

str_to_dateのMySQLドキュメントにオフセットフォーマット文字列が表示されませんでした。データはサードパーティシステムに返されるため、そのオフセットを保持することをお勧めします。データを所定の位置に保持することで、その戻りと返された日付でクエリを実行するまでの間にロジックを実行する必要がありません。ただし、直接実行すると機能するため、オフセットとは関係ないと思います。

WarningPythonがMySQLに対してクエリを実行すると、これが表示される原因となる誤った操作を行ったのですか?

4

1 に答える 1

0

マークBは正しかった。

直接実行すると、警告が表示されますが、おそらく気付かないでしょう。

mysql> SELECT * FROM mytable WHERE created > UNIX_TIMESTAMP(STR_TO_DATE('2012-09-10 00:00:00-05:00','%Y-%m-%d %k:%i:%s') - INTERVAL 1 DAY);
Empty set, 3 warnings (0.00 sec)

mysql> show warnings;
+---------+------+----------------------------------------------------------------------+
| Level   | Code | Message                                                              |
+---------+------+----------------------------------------------------------------------+
| Warning | 1292 | Truncated incorrect datetime value: '2012-09-10 00:00:00-05:00'      |
| Warning | 1292 | Truncated incorrect datetime value: '2012-09-10 00:00:00-05:00'      |
| Warning | 1292 | Incorrect datetime value: '1347148800' for column 'created' at row 1 |
+---------+------+----------------------------------------------------------------------+
3 rows in set (0.00 sec)
于 2012-09-11T13:46:07.653 に答える