Czego potrzebuję do odczytu baz danych Microsoft Access przy użyciu Pythona?

Jak mogę uzyskać dostęp do baz danych Microsoft Access w Pythonie? Z SQL?

Wolałbym rozwiązanie, które działa z Linuksem, ale mógłbym też zadowolić się Windowsem.

Wymagam tylko dostępu do odczytu.

Author: Georg Schölly, 2009-05-12

12 answers

Użyłem PYODBC aby pomyślnie połączyć się z MS Access db - na Windows. Instalacja była łatwa, użycie jest dość proste, wystarczy ustawić odpowiedni ciąg połączenia (Ten dla MS Access jest podany na liście) i przejść z przykładami.

 21
Author: Alex Boschmans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-24 12:06:48

W Linuksie MDBTools jest twoją jedyną szansą. [sporne]

W systemie Windows możesz obsługiwać pliki mdb za pomocą pypyodbc.

Aby utworzyć plik Access mdb:

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

Oto skrypt Hello World , który w pełni demonstruje funkcje obsługi dostępu pypyodbc.

Zastrzeżenie: jestem twórcą pypyodbc.

 29
Author: pypyodbc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:05

A może pyodbc ? to pytanie pokazuje, że można z niego odczytać MS Access.

 10
Author: stuartd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:39

Masz coś, co brzmi jak dobre rozwiązania. Innym, który może być nieco bliżej "metalu", niż byś chciał, jest MDB Tools.

MDB Tools jest zestawem bibliotek open source i narzędzi ułatwiających eksport danych z baz danych MS Access (pliki mdb) bez korzystania z bibliotek DLL firmy Microsoft. W ten sposób nie Windows OSs może odczytać dane. Lub, mówiąc inaczej, są one inżynierii odwrotnej układu pliku MDB.

Zauważ również, że wątpię, aby zaczęli praca na plikach ACCDB i prawdopodobnie nie będzie wiele żądań dla tej możliwości.

 9
Author: Tony Toews,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-13 02:32:10

Stare pytanie, ale pomyślałem, że wrzucę alternatywną propozycję pypiodbc Dla Windows: ADO. Okazuje się, że łatwo jest uzyskać dostęp do baz danych, arkuszy kalkulacyjnych Excel i wszystkiego innego za pomocą nowoczesnego (w przeciwieństwie do starego ODBC) sterownika za pośrednictwem COM.

Sprawdź następujące Artykuły:

 3
Author: Erik Knowles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-09 20:48:15

Na Ubuntu 12.04 to było to, co zrobiłem, aby to działało.

Zainstaluj pyodbc:

$ sudo apt-get install python-pyodbc

Kontynuuj instalację dodatkowych sterowników:

$ sudo apt-get install mdbtools libmdbodbc1

Zrób mały program testowy, który łączy się z DB i wyświetla wszystkie tabele:

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
Mam nadzieję, że pomogło.
 2
Author: Menda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-07 11:01:31

Osobiście nigdy nie byłem w stanie uzyskać narzędzia MDB (wraz z pokrewnymi rzeczami ODBC, takimi jak unixODBC) do poprawnego działania z Pythonem lub PHP pod Linuksem, nawet po wielu próbach. Po prostu próbowałem instrukcji w innej odpowiedzi na to pytanie tutaj i wszystko co dostałem to " Segmentation fault(core)".

Jednak dostałem Jython i sterownik UCanAccess JDBC do odczytu obu .mdb i .pliki accdb na Linuksie. Aby uzyskać szczegółowe instrukcje, jak skonfigurować go pod Ubuntu 14.04 LTS zobacz moją drugą odpowiedź tutaj .

 2
Author: Gord Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:09:42

Odczytywanie bazy danych Access jako ramki danych (Windows).

Jest to bardzo szybkie i łatwe rozwiązanie, które z powodzeniem wykorzystałem dla mniejszych baz danych.

Możesz odczytać bazę danych Access, wykonując Stały link do Excela i zapisując ten plik( wystarczy kilka kliknięć), link tutaj:

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

Możesz wtedy po prostu przeczytaj ten plik Excela jako ramkę danych pandy.

Więc, na przykład, Zapisz połączony plik Excel jako ' link_to_master.xlsx ' w lokalizacji \ FileStore \ subfolder1\subfolder.

Uruchom następujące w Pythonie:

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

Rozważ częstotliwość odświeżania łącza, jeśli ponownie odwiedzasz skrypt Pythona. czyli połączenie między Excelem a Access jest statyczne.

 2
Author: Tim0th1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-07 10:29:53

Najprawdopodobniej będziesz chciał użyć ładnego frameworka, takiego jak SQLAlchemy, aby uzyskać dostęp do swoich danych, a przynajmniej polecam. Wsparcie dla dostępu jest "eksperymentalne", ale pamiętam, że używałem go bez zbyt wielu problemów. Sam używa pyodbc pod maską, aby połączyć się z dostępem do dbs, więc powinien działać z windows, linux, os x i tym podobne.

 1
Author: Nico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-12 16:51:52

Jeśli zsynchronizujesz swoją bazę danych z Internetem za pomocą EQL Data, możesz odpytywać zawartość tabel dostępu za pomocą JSON lub YAML: http://eqldata.com/kb/1002 .

Ten artykuł dotyczy PHP, ale równie dobrze działałby w Pythonie.

 0
Author: apenwarr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-12 22:00:41

Jeśli masz trochę wolnego czasu, możesz spróbować naprawić i zaktualizować tę klasę Pythona, która odczytuje DBs MS-Access poprzez natywne API COM32-client: Klasa ekstrakcji i manipulacji dla Microsoft Access

 0
Author: ankostis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-10 19:12:11

Sposób, w jaki podłączam Pythona do MS Access pod Windows jest za pomocą tego sposobu: Połącz się z MS Access za pomocą Pythona. Może znajdziesz jakieś problemy na Win 7, więc znalazłem rozwiązanie: Rozwiązywanie połączenia między MS Access A Pythonem w Windows 7

Nie próbowałem łączyć się pod Linuksem!

 0
Author: combuilder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-29 12:15:10