Что мне нужно для чтения баз данных Microsoft Access с помощью Python?

Как получить доступ к базам данных Microsoft Access в Python? С SQL?

Я бы предпочел решение, которое работает с Linux, но я также могу согласиться на Windows.

мне требуется только доступ для чтения.

12 ответов


Я использовал PYODBC для успешного подключения к MS Access db-на Windows, хотя. Установить было легко, использование довольно просто, вам просто нужно установить правильную строку подключения (одна для MS Access приведена в списке), и вы идете с примерами.


в Linux MDBTools-ваш единственный шанс на данный момент. [спорных]

в Windows вы можете иметь дело с файлами mdb с pypyodbc.

чтобы создать файл mdb доступа:

import pypyodbc
pypyodbc.win_create_mdb( "D:\Your_MDB_file_path.mdb" )

вот сценарий Hello World это полностью демостатирует функции поддержки доступа pypyodbc.

отказ от ответственности: я разработчик pypyodbc.


как о pyodbc? Это так вопрос демонстрирует, что с его помощью можно читать MS Access.


У вас есть то, что звучит как некоторые хорошие решения. Еще один, который может быть немного ближе к "металлу", чем вам хотелось бы, - это MDB Tools.

MDB Tools представляет собой набор библиотек с открытым исходным кодом и утилит для облегчения экспорта данных из баз данных MS Access (mdb-файлов) без использования библиотек DLL Microsoft. Таким образом, не Windows OSs может читать данные. Или, другими словами, они перестраивают макет файла MDB.

также обратите внимание, что I сомневаюсь, что они начали работать над файлами ACCDB, и, вероятно, не будет большого запроса на эту возможность.


старый вопрос, но я думал, что опубликую альтернативное предложение pypyodbc для Windows: ADO. Оказывается, очень легко получить доступ к базам данных, таблицам Excel и всему остальному с современным (в отличие от старой школы ODBC) драйвером через COM.

проверьте следующие статьи:


на Ubuntu 12.04 это было то, что я сделал, чтобы заставить его работать.

установить pyodbc:

$ sudo apt-get install python-pyodbc

следуйте по установке некоторых дополнительных драйверов:

$ sudo apt-get install mdbtools libmdbodbc1

сделать небольшую тестовую программу, которая подключается к БД и отображает все таблицы:

import os
import pyodbc

db_path = os.path.join("path", "toyour", "db.mdb")
odbc_connection_str = 'DRIVER={MDBTools};DBQ=%s;' % (db_path)
connection = pyodbc.connect(odbc_connection_str)
cursor = connection.cursor()

query = "SELECT * FROM MSysObjects WHERE Type=1 AND Flags=0"
cursor.execute(query)
rows = cursor.fetchall()
for row in rows:
    print row

надеюсь, это помогло.


лично я никогда не мог заставить инструменты MDB (наряду с соответствующими ODBC-материалами, такими как unixODBC) правильно работать с Python или PHP под Linux, даже после многочисленных попыток. Я просто попробовал инструкции в другом ответе на этот вопрос здесь и все, что я получил "ошибка сегментирования (ядро бросила)".

тем не менее, я получил Jython и UCanAccess драйвер JDBC для чтения обоих .mdb и .accdb файлы на Linux. Для получения подробных инструкций о том, как я установите его под Ubuntu 14.04 LTS см. мой другой ответ здесь.


для чтения базы данных Access в виде фрейма данных pandas (Windows).

Это очень быстрое и простое решение, которое я успешно использовал для небольших баз данных.

вы можете прочитать базу данных Access, сделав постоянную ссылку на Excel и сохранив этот файл (это займет пару кликов), ссылка здесь:

https://support.office.com/en-gb/article/Connect-an-Access-database-to-your-workbook-a3d6500c-4bec-40ce-8cdf-fb4edb723525

затем вы можете просто прочитать этот файл Excel как фрейм данных pandas.

Так, например, сохраните связанный файл Excel как ' link_to_master.XLSX-файл в папке \хранилища файлов\subfolder1 подпапку\.

выполните следующие действия в python:

import pandas as pd
import os
os.chdir('\\FileStore\subfolder1\subfolder') #sets the folder location
df = pd.read_excel('link_to_master.xlsx') # reads the Excel file
df

рассмотрите частоту обновления ссылки, если вы повторное посещение скрипта python. т. е. связь между Excel и Access является статической.


скорее всего, вы захотите использовать хорошую структуру, такую как SQLAlchemy для доступа к вашим данным, или, по крайней мере, я бы рекомендовал его. Поддержка доступа является "экспериментальным", но я помню, что использовал его без особых проблем. Он сам использует pyodbc под капотом для подключения к Access dbs, поэтому он должен работать с windows, linux, os x и еще много чего.


Если вы синхронизируете свою базу данных в интернете с помощью данные EQL, затем вы можете запросить содержимое ваших таблиц доступа с помощью JSON или YAML:http://eqldata.com/kb/1002.

эта статья о PHP, но она будет работать так же хорошо в Python.


Если у вас есть свободное время, вы можете попытаться исправить и обновить этот python-класс, который читает MS-Access DBs через собственный COM32-client API:класс извлечения и манипуляции для Microsoft Access


способ подключения Python к MS Access под Windows заключается в следующем:подключение к MS Access с Python. Может быть, вы можете найти некоторые проблемы на Win 7, поэтому я нашел решение: решение соединения между MS Access и Python в Windows 7

Я не пытался подключиться под Linux!