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
相关产品推荐
相关产品推荐

