Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过pyodbc在SQL查询中指定列条件会导致错误_Python_Sql Server_Pyodbc - Fatal编程技术网

Python 通过pyodbc在SQL查询中指定列条件会导致错误

Python 通过pyodbc在SQL查询中指定列条件会导致错误,python,sql-server,pyodbc,Python,Sql Server,Pyodbc,我正在通过pyodbc运行对MS SQL Server的查询: conn = pyodbc.connect('DRIVER={ODBC Driver 11 for SQL Server};SERVER=some_server, some_port;DATABASE=MAP;UID='xxx';PWD='xxx') cursor = conn.cursor() query = """SELECT v_MAMain.MAID, v_MAMain.startDate, v_M

我正在通过
pyodbc
运行对MS SQL Server的查询:

    conn = pyodbc.connect('DRIVER={ODBC Driver 11 for SQL Server};SERVER=some_server, some_port;DATABASE=MAP;UID='xxx';PWD='xxx')
    cursor = conn.cursor()

    query = """SELECT v_MAMain.MAID, v_MAMain.startDate, v_MAMain.endDate, v_MAMain.fromTime, v_MAMain.toTime, v_MAMain.StatusDesc, v_MAMain.name, v_Event_Statistic.TotalGuestsAtEvent, v_Event_Statistic.PlannedGuestsAtEvent, v_Event_Statistic.City, v_Event_Statistic.Location, v_Event_Statistic.Host, v_Event_Statistic.EventSpeakers, v_MAMain.Owner, v_Event_Statistic.PlannedHoursProjectOwner, v_Event_Statistic.EventManagerName, v_Event_Statistic.PlannedHoursEventManager, v_Event_Statistic.CreditSuisseEventManager, v_MAMain.CostCenter, v_MAMain.[Project Year], v_MAMain.category, MADetails.NameOfEventStaff1, MADetails.PlannedWorkDurationEventStaff1, MADetails.NameOfEventStaff2, MADetails.PlannedWorkDurationEventStaff2, MADetails.NameOfEventStaff3, MADetails.PlannedWorkDurationEventStaff3, MADetails.NameOfEventStaff4, MADetails.PlannedWorkDurationEventStaff4, MADetails.NameOfEventStaff5, MADetails.PlannedWorkDurationEventStaff5, v_Event_Statistic.KPIEventQuality, v_Event_Statistic.KPIBusinessFit
FROM (v_MAMain INNER JOIN v_Event_Statistic ON v_MAMain.MAID = v_Event_Statistic.ProjectID) INNER JOIN MADetails ON v_MAMain.MAID = MADetails.MAID
WHERE (((v_MAMain.StatusDesc)<>"Deleted") AND ((v_MAMain.CostCenter)="0892 / 932" Or (v_MAMain.CostCenter)="0897 / 951") AND ((v_MAMain.[Project Year])=2019) AND ((v_MAMain.category)="Event"));"""

    cursor.execute(query)
conn=pyodbc.connect('DRIVER={ODBC DRIVER 11 for SQL Server};Server=some\u Server,some\u port;DATABASE=MAP;UID='xxx';PWD='xxx')
游标=连接游标()
query=“”“选择v_MAMain.MAID、v_MAMain.startDate、v_MAMain.endDate、v_MAMain.fromTime、v_MAMain.toTime、v_MAMain.StatusDesc、v_MAMain.name、v_Event_Statistic.TotalGuestAgent、v_Event_Statistic.PlannedGuestAgent、v_Event_Statistic.City、v_Event_Event_统计城市、v_Event_统计位置、v_Event统计主机、v_Event发言人、v_MAMain.Owner、,v_Event_Statistic.PlannedHours ProjectOwner,v_Event_Statistic.EventManagerName,v_Event_Statistic.PlannedHoursEventManager,v_Event_Statistic.CreditsUseEventManager,v_MAMain.CostCenter,v_MAMain.[项目年],v_MAMain.category,MADetails.NameofVentstaff1,MADetails.PlannedWorkdurationVentstaff1,MADetails.NameofVentstaff1,MADetails.NameofVentstaff2,MADetails.PlannedWorkDurationEventStaff2,MADetails.NameofVentstaff3,MADetails.PlannedWorkDurationEventStaff3,MADetails.NameofVentstaff4,MADetails.PlannedWorkDurationEventStaff4,MADetails.NameofVentstaff5,MADetails.PlannedWorkDurationEventStaff5,v_事件统计,KPIEventQuality,v_事件统计
从(v_MAMain.MAID=v_Event_Statistic.projectd上的v_MAMain内部连接v_Event_统计信息)v_MAMain.MAID=madetals.MAID上的内部连接详细信息
其中((v_MAMain.StatusDesc)“删除”)和((v_MAMain.CostCenter)=“0892/932”或(v_MAMain.CostCenter)=“0897/951”)和((v_MAMain.[项目年]=2019)和((v_MAMain.category)=“事件”);"""
cursor.execute(查询)
我得到以下错误:

pyodbc.ProgrammingError:('42S22',“[42S22][Microsoft][ODBC驱动程序 11对于SQL Server][SQL Server]无效的列名“已删除”。(207) (SQLExecDirectW);[42S22][Microsoft][ODBC驱动程序11用于SQL 服务器][SQL Server]列名“0892/932”无效。(207);[42S22] [Microsoft][SQL Server的ODBC驱动程序11][SQL Server]列无效 名称为“0897/951”。(207);[42S22][Microsoft][ODBC驱动程序11 for SQL 服务器][SQL Server]列名“事件”(207)”无效

似乎列条件:
Deleted
Event
等被读取为列名。不使用
WHERE
子句的相同查询将正常工作

查询是在Access中设计的,自动生成的SQL是从Access复制粘贴到我的脚本中的


我是否需要以某种方式更正SQL或是其他原因导致错误?

将双引号更改为常量值周围的单引号。在SQL Server中,双引号中的字符串被视为列名。

实际上,我认为行为取决于
SET QUOTED\u IDENTIFIER
的设置,但是的,单引号更安全为字符串文本下注。