SQL-запросы через PYODBC не работают на одном компьютере, работают на другом - PullRequest
1 голос
/ 12 января 2010

Я работаю над программой для автоматизации анализа данных из файлов XML и сохранения их в нескольких базах данных. (В частности, служба качества воды в реальном времени USGS, если кому-то интересно, на http://waterservices.usgs.gov/rest/WaterML-Interim-REST-Service.html) написана на Python 2.5.1 с использованием LXML и PYODBC. Базы данных находятся в Microsoft Access 2000.

Функция подключения выглядит следующим образом:
def get_AccessConnection (дБ):
connString = 'DRIVER = {Драйвер Microsoft Access (* .mdb)}; DBQ =' + db
cnxn = pyodbc.connect (connString, autocommit = False)
курсор = cnxn.cursor ()
вернуть cnxn, курсор
где db - путь к базе данных.

Программа:
а) открывает соединение с базой данных
b) анализирует от 2 до 8 XML-файлов для этой базы данных и объединяет значения из них в серию записей для вставки в базу данных (используя вложенную словарную структуру, а не определяемый пользователем тип)
c) циклически проходит серию записей, cursor.execute () - для каждого запроса SQL
г) фиксирует и закрывает соединение с базой данных

Если вызов cursor.execute () выдает ошибку, он записывает трассировку и запрос в файл журнала и перемещается дальше.

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

Мой коллега и я оба на компьютерах с Windows XP, на которых установлен Microsoft Access 2000, и установлены одинаковые версии Python, lxml и pyodbc. Я понятия не имею, как проверить, есть ли у нас одна и та же версия драйверов Microsoft ODBC. Я не смог найти никакой разницы между записями, которые есть, и записями, которых нет. Я нахожусь в процессе тестирования, возникает ли такая же проблема с другими базами данных, и происходит ли она также на компьютере третьего сотрудника.

Что я действительно хотел бы знать, так это то, что кто-то может придумать, вызвало бы это, потому что это не имеет смысла для меня. Подводя итог: код Python, выполняющий SQL-запросы, молча завершит работу с половиной из них на одном компьютере и будет отлично работать на другом.

Edit:
Нет больше проблем. Я только что сделал, чтобы мой коллега запустил его снова, и база данных была полностью обновлена ​​без пропущенных записей. До сих пор не известно, почему это не удалось в первую очередь, и не произойдет ли это снова или нет, но «проблема решена».

1 Ответ

1 голос
/ 26 января 2011

Понятия не имею, как проверить, у нас та же версия Драйверы Microsoft ODBC.

Я думаю, что вы ищете панель управления | Административные инструменты | Источники данных (ODBC). Перейдите на вкладку «Драйверы».

Я думаю, что Access 2000 или Office 2000 поставлялись с настольной версией SQL Server под названием «MSDE». Может быть стоит установить это для тестирования. (Или производство, в этом отношении.)

...