添加日期时间.timedelta()到python-mysql查询

2024-06-17 15:37:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想向mysl查询添加以下带有datetime变量的代码:

tb1.primeday > (datetime.now().date() - timedelta(days=Days))

对此查询:

q = """
    SELECT tb1.id
    FROM tb1
    join tb3 ON tb3.id= tb1.csid
    """

我试过这个,但不起作用:

q = """
    SELECT tb1.id
    FROM tb1
    join tb3 ON tb3.id= tb1.csid
    WHERE TIMESTAMPDIFF(DAY, tb1.primeday, TIMESTAMPDIFF(DAY, 
    {},tb3.Days))
    """.format(datetime.now().date())

tb1.primeday的格式类似于:

YYYY-MM-DD

你知道问题出在哪里还是最好的解决办法吗?你知道吗


Tags: fromiddatetimedateondaysselectnow
1条回答
网友
1楼 · 发布于 2024-06-17 15:37:31

如果打印q的值,可以看到如下内容:

>>> print(q)

    SELECT tb1.id
    FROM tb1
    join tb3 ON tb3.id= tb1.csid
    WHERE TIMESTAMPDIFF(DAY, tb1.primeday, TIMESTAMPDIFF(DAY,
    2019-08-24,tb3.Days))

我记得,任何字面上的日期都应该被引用。所以应该用'{}'替换{}。你知道吗

q = """
    SELECT tb1.id
    FROM tb1
    join tb3 ON tb3.id= tb1.csid
    WHERE TIMESTAMPDIFF(DAY, tb1.primeday, TIMESTAMPDIFF(DAY, 
    '{}',tb3.Days))
    """.format(datetime.now().date())

结果将是

    SELECT tb1.id
    FROM tb1
    join tb3 ON tb3.id= tb1.csid
    WHERE TIMESTAMPDIFF(DAY, tb1.primeday, TIMESTAMPDIFF(DAY,
    '2019-08-24',tb3.Days))

根据文档,这应该可以正常工作。你知道吗

增强

(感谢第一条评论的作者)

另一方面,如果MySQL服务器和您的计算机上的时钟是同步的,那么您可以用date(NOW())的调用替换文字日期的创建

q = """
    SELECT tb1.id
    FROM tb1
    join tb3 ON tb3.id= tb1.csid
    WHERE TIMESTAMPDIFF(DAY, tb1.primeday, TIMESTAMPDIFF(DAY, 
    DATE(NOW()),tb3.Days))
    """

相关问题 更多 >