项目场景:
今天做一个小程序时,往数据库查询时遇到一个奇怪问题,表名是按年月产生的,如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 pymssqlconnect = 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])