INSERT INTO SELECT синтаксическая ошибка Python ODBC с Microsoft Access - PullRequest
1 голос
/ 13 июля 2011

У меня был долгий поиск здесь и в Интернете, и я не могу найти никаких примеров, объясняющих, почему я получаю синтаксическую ошибку по следующим вопросам: импорт win32com.client

`
        PregCode = recordsetraw.Fields.Item("PregnancyCode").value
        SQL = "INSERT INTO UniqueData SELECT * FROM Rawdata WHERE PregnancyCode =%s"
        params = (PregCode)
        connection.execute(SQL, params)
        print PregCode
    recordsetraw.MoveNext()`

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

Traceback (последний вызов был последним): Файл "testdb.py", строка 22, в connection.execute (SQL, params) Файл "", строка 2, в исполнении pywintypes.com_error: (-2147352567, «Возникло исключение.», (0, u'Microsoft JET D atabase Engine ', u "Синтаксическая ошибка в выражении запроса' PregnancyCode =% s '.", Нет , 5003000, -2147217900), нет)

Я попробовал жесткое кодирование в PregnancyCode, чтобы увидеть, изменится ли это, но нет, та же ошибка.

Есть идеи, что я делаю не так?

Ответы [ 2 ]

1 голос
/ 13 июля 2011

Мой Python очень ржавый, и я не помню, как называется этот тип замещения, но я думаю, что вы пытаетесь выполнить нечто подобное с помощью оператора INSERT:

>>> print "Hello %s" %("World")
Hello World

Из вашего кода:

SQL = "INSERT INTO UniqueData SELECT * FROM Rawdata WHERE PregnancyCode =%s"
params = (PregCode)
connection.execute(SQL, params)

Проблема в подключении является соединением ADO, и его Метод выполнения не выполнит желаемую замену текста Pythonic.

Я думаю, что вы должны сделать подстановку текста в Python до , когда вы вводите строку INSERT в connection.execute Может быть что-то вроде этого:

SQL = "INSERT INTO UniqueData SELECT * FROM Rawdata WHERE PregnancyCode =%s" %(PregCode)
connection.execute(SQL)

Если я не получилPython совершенно прав, надеюсь, он достаточно близко, чтобы вы могли увидеть, как это исправить.

Кстати, в вашем названии упоминается Python ODBC, но я не вижу, чтобы ваш код вообще использовал ODBC.

0 голосов
/ 13 июля 2011

Вашему SQL требуется предложение "INTO":

SQL = "INSERT INTO UniqueData SELECT * FROM Rawdata WHERE PregnancyCode =%s"
...