Используя pyodbc для вставки строк в MDB MS Access, как мне экранировать параметры? - PullRequest
2 голосов
/ 08 апреля 2010

Я использую pyodbc для связи с устаревшим файлом Access 2000 .mdb.

У меня есть курсор, и я пытаюсь выполнить это:

c.execute("INSERT INTO [Accounts] ([Name], [TypeID], [StatusID], [AccountCat], [id]) VALUES (?, ?, ?, ?, ?)", [u'test', 20, 10, 4, 2])

Однако в результате

pyodbc.Error: ('HYC00', '[HYC00] [Microsoft][ODBC Microsoft Access Driver]Optional feature not implemented  (106) (SQLBindParameter)')

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

PHP и mysql объединяются, чтобы собрать mysql_real_escape_string и друзей, но я не могу найти функцию pyodbc для экранирования значений.

Если бы вы могли сообщить мне, каков рекомендуемый способ вставки этих данных (из python), это было бы очень полезно. В качестве альтернативы, если у вас есть функция python для экранирования строк odbc, это также было бы здорово.

1 Ответ

1 голос
/ 09 апреля 2010

Что ж, очевидно, это просто Access снова кричит на меня.

Раньше я вставлял целые числа python.Теперь я попытался вставить длинные python.

При вставке long в качестве параметра я получаю

pyodbc.Error: ('HYC00', '[HYC00] [Microsoft][ODBC Microsoft Access Driver]Optional feature not implemented  (106) (SQLBindParameter)')

Добавление этого кода в мою функцию непосредственно перед вызовом execute исправляет это:

    for k, v in new.items():
        new[k] = int(v) if isinstance(v, long) else v

IOW, замена long на int работает нормально.Go Access, что за описательная ошибка.

Строго говоря, я не думаю, что это ошибка в pyodbc, а скорее ошибка при работе с этим конкретным драйвером.В любом случае, спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...