繁体   English   中英

将datetime.timedelta()添加到python mysql查询

[英]add datetime.timedelta() to a python mysql query

我想将以下具有datetime变量的代码添加到mysl查询中:

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

您是否知道问题出在哪里或最佳解决方案是什么?

如果打印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))
    """

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM