【问题标题】:Pymsql datetime queryMysql日期时间查询
【发布时间】:2022-05-04 04:24:31
【问题描述】:

我正在使用以下查询查询 SQL 表

select  ms.Ename as Name,ms.DateTimeStamp, s.Author
from Spt s,  Mst ms
where s.MstID = ms.MstID
and s.Version = ms.CurrentVersion

and  ms.DateTimeStamp > (SELECT DATEADD(day,-10, GETDATE()))

我可以看到上面的行。

我现在正在pycharm中尝试pymsql。

import requests
import json
from datetime import datetime
import pymssql

server = 'devserver'
database = 'devdb'
username = 'devuser'
password = 'passwd'

cnxn = pymssql.connect(server, sqlusername, sqlpassword, database)

query = "select ms.Ename as Name, " \
        "ms.DateTimeStamp, s.Author " \
        "from Spt s,  Mst ms " \
        "where s.MstID = ms.MstID  " \
        "and s.Version = ms.CurrentVersion " \
        "and ms.DateTimeStamp >  SELECT DATEADD(day, -" + 10 + ", GETDATE())" \
        "order by ms.DateTimeStamp ; "

cursor = cnxn.cursor()
cursor.execute(query)
row = cursor.fetchall()
cursor.close()
print(row)

我收到以下错误: 我知道它与日期时间格式有关。但找不到解决方案。 谁能帮忙解决这个问题。

文件“C:/Users/dp/code_another.py”,第 57 行,在 get_details "和 ms.DateTimeStamp > (SELECT DATEADD(day, -" + 10 + ", GETDATE()))"
TypeError:只能将str(不是“int”)连接到str

【问题讨论】:

    标签: python pymssql


    【解决方案1】:

    问题是您需要将日期偏移量预先格式化为字符串,然后才能将其连接到查询中。

    假设您使用的是 Python 3.7 或更高版本,您可以使用格式化字符串运算符以简单的方式处理此问题(三引号允许您使用多行字符串)。在这里,我将变量 days_offset 定义为 -10,然后使用 {braces} 指示我希望它出现在格式化字符串中的什么位置。像这样:

    days_offset = -10
    query = f"""
            select ms.Ename as Name, ms.DateTimeStamp, s.Author 
            from Spt s,  Mst ms where s.MstID = ms.MstID and s.Version = ms.CurrentVersion 
            and ms.DateTimeStamp >  SELECT DATEADD(day,{days_offset}, 
            GETDATE()) order by ms.DateTimeStamp ; 
            """
    

    如果您仍在使用 Python 2.7,则可以将值转换为原始代码中的字符串,如下所示:

    query = "select ms.Ename as Name, " \
            "ms.DateTimeStamp, s.Author " \
            "from Spt s,  Mst ms " \
            "where s.MstID = ms.MstID  " \
            "and s.Version = ms.CurrentVersion " \
            "and ms.DateTimeStamp >  SELECT DATEADD(day, -" + str(10) + ", GETDATE())" \
            "order by ms.DateTimeStamp ; "
    

    【讨论】:

      猜你喜欢
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多