Задание критериев столбца в запросе SQL через pyodbc приводит к ошибкам - PullRequest
1 голос
/ 06 мая 2019

Я выполняю запрос к MS SQL Server через pyodbc:

    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)

Я получаю следующую ошибку:

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] [Драйвер ODBC 11 для SQL Server] [SQL Server] Недопустимый столбец название '0897/951'. (207); [42S22] [Microsoft] [Драйвер ODBC 11 для SQL Сервер] [SQL Server] Недопустимое имя столбца «Событие». (207) ")

Похоже, что критерии столбца: Deleted, Event и т. Д. Вместо этого читаются как имена столбцов. Тот же запрос без предложения WHERE будет работать нормально.

Запрос разработан в Access, и автоматически сгенерированный SQL скопирован из Access в мой скрипт.

Нужно ли как-то исправлять SQL или что-то другое вызывает ошибку?

1 Ответ

1 голос
/ 06 мая 2019

Изменение двойных кавычек на одинарные кавычки вокруг постоянных значений. В SQL Server строка в двойных кавычках считается именем столбца.

...