Sql server 关键字';键';pyodbc错误42000

Sql server 关键字';键';pyodbc错误42000,sql-server,python-3.x,postgresql,Sql Server,Python 3.x,Postgresql,我在运行python脚本将数据从PostgreSQL推送到MSSQL时遇到了错误 2020/09/17 09:55:26:mssql:错误:在mssql中插入数据时出现了严重错误-bailing 回溯(最近一次呼叫最后一次): 文件“/my_File.py”,第40行,在ImportToMsqlReal中 dataToInsert) pyodbc.ProgrammingError:('42000',“[42000][Microsoft][ODBC驱动程序17 for SQL Server][SQ

我在运行python脚本将数据从PostgreSQL推送到MSSQL时遇到了错误

2020/09/17 09:55:26:mssql:错误:在mssql中插入数据时出现了严重错误-bailing 回溯(最近一次呼叫最后一次): 文件“/my_File.py”,第40行,在ImportToMsqlReal中 dataToInsert) pyodbc.ProgrammingError:('42000',“[42000][Microsoft][ODBC驱动程序17 for SQL Server][SQL Server]关键字'key'附近的语法不正确。(156)(SQLExecute)”)

以下是代码行:

query = """SELECT vi.asset_id ,vi.vulnerability_id,a.last_assessed_for_vulnerabilities as "last_detected",vi.status,vi.proof::varchar(10485760),vi.key::varchar(10485760),vi.service,vi.port,vi.protocol
    FROM  public.fact_asset_vulnerability_instance vi
    INNER JOIN public.dim_asset a
    ON vi.asset_id = a.asset_id"""
插入

def importToMSSQLReal(mssql,mssqlstring,dataToInsert):
mssql = pyodbc.connect(mssqlstring)
log = logging.getLogger('mssql')
curs = mssql.cursor()
curs.fast_executemany = True
try:
    curs.executemany(
            "INSERT INTO {table} (asset_id,vulnerability_id,last_detected,status,proof,key) VALUES (?,?,?,?,?,?)".format(table=mscfg['table']),
            dataToInsert)
    mssql.commit()
except:
    print("bad")
    log.exception("Something went very wrong interting data into mssql - bailing")
    exit(2)
curs.close()
mssql.close()
del mssql
是SQL Server中的一个。您必须确保它位于括号之间:

SELECT 1 as [key]

、vi.proof::varchar(10485760)、vi.key::varchar(10485760)
对于T-SQL选择字段列表无效语法。你想在这里干什么?传递一个参数,转换一个值?我认为您需要显示失败的INSERT语句,而不是SELECT语句,它显然没有失败。