python - 在 Python 中运行时出现 MySQL 查询错误,但在直接运行时却没有

标签 python mysql django

我将 '2012-09-10 00:00:00-05:00' 传递给 MySQL 查询。使用 pytz module 检索此值对于 Python。

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()

我没有看到偏移量 format str_to_date 的 MySQL 文档中的字符串。我更愿意保留该偏移量,因为数据是为第 3 方系统返回的,并且通过将其保留在适当的位置,我不必在该返回和使用返回日期执行查询之间做任何逻辑。但是,我认为它与偏移量无关,因为如果我直接运行它,它就可以工作。

当 Python 运行针对 MySQL 的查询时,我做错了什么会导致出现此警告

最佳答案

Marc 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)

关于python - 在 Python 中运行时出现 MySQL 查询错误,但在直接运行时却没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12355190/

相关文章:

Python日期时间到纪元

php - 无法在 php 函数中运行数据库查询

PHP 将数组传递给 PDO bindParam

django - 为什么 Selenium 会导致 CSRF 403?

Python SSL 请求和让我们加密证书

python - virtualenv 和 CLI 工具

python - Python 中的 GString

mysql - 每年的 SQL 事务总和

python - Django 的实时选项(Websockets、flash、轮询)?

python - 尝试使用 django-embed-video 将 youtube 视频列表显示到 django 模板中