pymssql._pymssql.ProgrammingError: (102, b“Incorrect syntax near ‘202307‘.DB-Lib error message 20018

在尝试用Python的pymssql模块查询动态表名(如JY_XJJG202307)时,作者遇到了SQL编程错误。原本使用字符串格式化方法(%s)并传入带有单引号的变量失败,但将表名占位符改为%d并传入整型值后,问题得到解决。这表明在特定情况下,数据库可能需要整型参数而非字符串来构建动态表名。
摘要由CSDN通过智能技术生成

项目场景:

今天做一个小程序时,往数据库查询时遇到一个奇怪问题,表名是按年月产生的,如JY_XJJG202307,用Python编写的语名访问时报标题一样的错。

问题描述

代码如下:
import pymssql
connect = pymssql.connect('192.168.1.7', 'test', 'usename', 'pwd')  # 服务器名,账户,密码,数据库名
if connect:
    print("数据库已连接成功...\n")
sql_test = """SELECT * FROM JY_XJJG%s"""
date = '202307'
cursor = connect.cursor()
cursor.execute(sql_test, date)
row = cursor.fetchone()
print(row[0])

运行报错:

Traceback (most recent call last):
  File "D:/TCP_TEST/FTP_Test_1.py", line 11, in <module>
    cursor.execute(sql_test, date)
  File "src\pymssql\_pymssql.pyx", line 476, in pymssql._pymssql.Cursor.execute
pymssql._pymssql.ProgrammingError: (102, b"Incorrect syntax near '202307'.DB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n")

 


原因分析:

在网上查解决办法时都是提及逗号或引号使用中文输入法输入,我详细检查过没有这样的问题。那就不能用寻常的思维的想问题了,为什么会报'202307'有错呢?按常理说表名应该是字符型,在给变量date赋值是加上了单引号,SQL语句占位符也用了%s,但是依然报错。于是转变一下思维,随便试试,试一下用整型,将引号去除,占位符改用%d,竟然执行成功了。


解决方案:

代码修改如下:
import pymssql
connect = pymssql.connect('192.168.1.7', 'test', 'usename', 'pwd')  # 服务器名,账户,密码,数据库名
if connect:
    print("数据库已连接成功...\n")
sql_test = """SELECT * FROM JY_XJJG%d"""
date = 202307
cursor = connect.cursor()
cursor.execute(sql_test, date)
row = cursor.fetchone()
print(row[0])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值