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

如何在SQL Server查询字符串中有效使用%s占位符(Python+pymssql)

解决pymssql参数化查询返回空结果的问题

你的问题出在手动拼接SQL字符串和错误处理占位符引号上,pymssql配合pandas的read_sql时,必须用参数化查询的正确方式,不能直接用字符串格式化%拼接。

正确实现步骤:

  • 移除job_id = '%s'中的单引号,参数化查询会自动根据数据类型处理引号和转义
  • 不要直接拼接SQL字符串,改用read_sql的params参数传递变量
  • 确保参数顺序和SQL中%s的顺序完全对应

修正后的代码:

import pandas as pd
import pymssql
import datetime
import time
import requests

def liststeps(date1, jobid):
    sqlquery = """
    select stepi, stepn, pckg, runst, rundur
    from src_table
    where run_date = %s
    and job_id = %s
    """
    # 通过params传递参数,pymssql自动处理类型和引号
    df = pd.read_sql(sqlquery, conn, params=(date1, jobid))
    print(df)

为什么之前的方式会出问题:

  1. 字符串拼接导致的参数格式错误:手动给%s加单引号后,若jobid包含特殊字符(如单引号),会导致SQL语法错误,或者生成的job_id值与数据库存储的格式不匹配,从而返回空结果
  2. 类型不匹配:直接用%拼接时,date1可能被转换成不符合SQL Server要求的字符串格式,而参数化查询会保留原始数据类型,确保日期参数被正确解析

额外注意:

  • 确保conn是已正确建立的pymssql连接对象
  • 如果date1是Python的datetime对象,参数化查询会自动转换成SQL Server可识别的日期类型,无需手动格式化字符串

内容的提问来源于stack exchange,提问作者eagle17

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:02:24