Python MySQL为查询返回错误的行,但Phpmyadmn显示右行

时间:2015-05-09 01:08:36

标签: python mysql mysql-python

我试图获得一个月的第一张和最后一张记录。在phpmyadmin中我得到了正确的结果。在python我没有。事实上,python为这两个查询返回相同的行。第一个数字是行的表主键。

SELECT * FROM mcs WHERE time_stamp < DATE_ADD( DATE_ADD( LAST_DAY( NOW( ) ) , INTERVAL 25 HOUR ) , INTERVAL -2 MONTH) AND wot_id = 1010965979 LIMIT 1
((838831, '1010965979', datetime.datetime(2015, 3, 6, 22, 0), Decimal('444.88'), Decimal('0.00')),)
SELECT * FROM mcs WHERE time_stamp < DATE_ADD( DATE_ADD( LAST_DAY( NOW( ) ) , INTERVAL 24 HOUR ) , INTERVAL -1 MONTH)AND wot_id = 1010965979 LIMIT 1
((838831, '1010965979', datetime.datetime(2015, 3, 6, 22, 0), Decimal('444.88'), Decimal('0.00')),)

phpmyadmin为第一个查询显示此行,

839037 1010965979 2015-04-01 00:00:00 437.36 0.00

这是第二次:

953868 1010965979 2015-04-30 23:00:00 479.67 0.00

使用MySQLdb和python 3

有什么问题?这是MySQLdb中的一个错误吗?我不这么认为,因为它只是将一个SQL字符串传递给mysql

编辑:

我使用unix时间遇到同样的问题。为什么同一SQL的复制和过去在同一个数据库中给出不同的结果?

time.struct_time(tm_year=2015, tm_mon=4, tm_mday=1, tm_hour=2, tm_min=18, tm_sec=51, tm_wday=2, tm_yday=91, tm_isdst=-1)
1427846400
SELECT * FROM mcs WHERE time_stamp < FROM_UNIXTIME(1427846400) AND wot_id = 1010965979 LIMIT 1
((838831, '1010965979', datetime.datetime(2015, 3, 6, 22, 0), Decimal('444.88'), Decimal('0.00')),)
time.struct_time(tm_year=2015, tm_mon=5, tm_mday=1, tm_hour=2, tm_min=18, tm_sec=51, tm_wday=4, tm_yday=121, tm_isdst=-1)
1430438400
SELECT * FROM mcs WHERE time_stamp < FROM_UNIXTIME(1430438400) AND wot_id = 1010965979 LIMIT 1
((838831, '1010965979', datetime.datetime(2015, 3, 6, 22, 0), Decimal('444.88'), Decimal('0.00')),)

1 个答案:

答案 0 :(得分:0)

解决了这个问题,PhpMyadmin必须默默地在SQL中放置'order by'。

将其更改为

SELECT * FROM mcs WHERE time_stamp&lt; FROM_UNIXTIME(1427846400)和wot_id = 1010965979 ORDER BY time_stamp DESC LIMIT 1

按预期工作。