You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyCharm中使用pymssql执行SQL日期查询出现字符串拼接报错如何解决

问题修复说明

错误原因

  • 直接触发报错的原因是整数类型不能直接和字符串拼接:你代码中将整数10直接用+和SQL字符串拼接,Python不允许不同类型变量直接拼接,因此抛出TypeError。
  • 你还存在2个隐藏问题:
    1. 变量名不匹配:你定义的数据库账号密码变量为username、password,但连接时调用了未定义的sqlusername、sqlpassword,后续运行到连接步骤会触发变量未定义报错。
    2. SQL语法缺失括号:原SQL中DATEADD部分外层有括号包裹,你拼接的SQL里漏写了左括号,即使解决了拼接问题也会触发SQL语法错误。

最优修复方案(推荐参数化查询,避免SQL注入风险,也无需手动处理类型转换)

import requests
import json
from datetime import datetime
import pymssql

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

# 修复变量名错误
cnxn = pymssql.connect(server, username, password, 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, -%s, GETDATE()))
order by ms.DateTimeStamp ; """

cursor = cnxn.cursor()
# 执行查询时传入参数,pymssql会自动处理类型转换
cursor.execute(query, (10,))
rows = cursor.fetchall()
cursor.close()
cnxn.close()
print(rows)

临时修复方案(仅解决拼接问题,不推荐生产环境使用)

如果你一定要手动拼接SQL的话,将整数10转成字符串即可:

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 ; "

内容的提问来源于stack exchange,提问作者Deepak P G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:06:03