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

Python连接MS SQL数据库:带日期条件的查询实现方法

搞定Python连接MS SQL的日期条件查询问题

嘿,作为Python新手能连上MS SQL已经很棒啦!接下来把日期变量融入查询的正确姿势,我给你捋清楚:

核心思路:用参数化查询(安全又省心)

千万别直接把日期变量拼到SQL字符串里!一来容易被搞SQL注入,二来日期格式很容易出问题。正确的做法是用参数化查询,Python连接MS SQL的主流库(比如pyodbc、pymssql)都支持这个,通用的占位符是?。

完整代码示例

import datetime as dt
import pyodbc  # 假设你用的是pyodbc,pymssql用法差不多

# 你的数据库连接代码(你已经搞定了,这里省略)
conn = pyodbc.connect(...)
cursor = conn.cursor()

# 你的日期变量定义
End = dt.datetime.today()
Start = End - dt.timedelta(days=1)

# 修改后的查询语句:注意MS SQL没有sysdate,别用这个!
# 直接把我们的Start和End作为参数传进去
cursor.execute(
    "SELECT Col1, Col2 FROM Data WHERE date BETWEEN ? AND ?;",
    (Start, End)  # 参数要和?的顺序对应哦
)

# 拿结果的操作
results = cursor.fetchall()
for row in results:
    print(row)

# 用完记得关连接
cursor.close()
conn.close()

几个关键细节要注意

  • 替换sysdate:你原来SQL里的sysdate是Oracle的写法!MS SQL里对应的是GETDATE()或者SYSDATETIME(),不过既然你已经在Python里定义了Start和End,直接用这俩变量当查询边界反而更灵活,不用依赖数据库的系统时间。
  • 参数顺序别搞反:BETWEEN是“早日期在前,晚日期在后”,你的Start是End减1天,所以把Start放在第一个?,End放第二个,这样查询的是昨天到今天的数据。
  • 自动转格式:参数化查询会自动处理Python datetime和MS SQL日期类型的转换,不用你手动转字符串格式,省好多麻烦!

相关技术参考

  • pyodbc参数化查询:官方文档里重点推荐了参数化查询来避免注入和处理类型转换,你可以查看它的「Parameters」章节,里面讲了不同数据库的占位符用法。
  • MS SQL日期函数:如果以后需要在SQL里处理日期(比如算上个月的今天),可以查MS SQL官方文档里的GETDATE()、DATEADD()这些函数的用法。
  • Python datetime模块:要是想搞更复杂的日期操作(比如取某天的凌晨0点),可以看Python官方文档里datetime模块的timedelta、strftime这些方法的说明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:32:23