De quoi ai-je besoin pour lire les bases de données Microsoft Access en utilisant Python?

Comment puis-je accéder aux bases de données Microsoft Access en Python? Avec SQL?

je préférerais une solution qui fonctionne avec Linux, mais je pourrais aussi me contenter de Windows.

Je n'ai besoin que d'un accès en lecture.

31
demandé sur Georg Schölly 2009-05-12 19:29:23

12 réponses

j'ai utilisé PYODBC pour se connecter avec succès à un accès ms db - sur Windows cependant. Installer était facile, l'utilisation est assez simple, vous avez juste besoin de définir la chaîne de connexion droite (celle pour MS Access est donnée dans la liste) et de vous allez avec les exemples.

21
répondu Alex Boschmans 2015-02-24 12:06:48

sur Linux, MDBTools est votre seule chance à partir de maintenant. [contestée]

sous Windows, vous pouvez traiter des fichiers mdb avec pypyodbc.

pour créer un fichier Access mdb:

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

voici un script Hello World qui démostre complètement les fonctions de support D'accès de pypyodbc.

clause de non-responsabilité: je suis le développeur de pypyodbc.

29
répondu pypyodbc 2017-05-23 12:02:05

Que Diriez-vous de pyodbc ? cette question démontre qu'il est possible de lire MS Access en l'utilisant.

10
répondu stuartd 2017-05-23 11:46:39

vous avez ce qui ressemble à quelques bonnes solutions. Un autre qui pourrait être un peu plus proche du "métal" que vous aimeriez est les outils MDB.

MDB Tools est un ensemble de bibliothèques et d'utilitaires open source pour faciliter l'exportation de données à partir de bases de données MS Access (fichiers mdb) sans utiliser les DLLs de Microsoft. Ainsi Non Windows OSs peut lire les données. Ou, pour le dire autrement, ils inversent la disposition du fichier MDB.

notez aussi que je doute qu'ils aient commencé à travailler sur les fichiers ACCDB et qu'il n'y aura probablement pas beaucoup de demandes pour cette capacité.

9
répondu Tony Toews 2009-05-13 02:32:10

vieille question, mais j'ai pensé poster une suggestion alternative de pypyodbc Pour Windows: ADO. Il s'avère qu'il est très facile d'accéder aux bases de données Access, aux tableurs Excel et à n'importe quoi d'autre avec un driver moderne (par opposition à un ODBC de la vieille école) via COM.

voir les articles suivants:

3
répondu Erik Knowles 2013-08-09 20:48:15

Sur Ubuntu 12.04 c'est ce que j'ai fait pour le faire fonctionner.

Installer pyodbc:

$ sudo apt-get install python-pyodbc

installation de pilotes supplémentaires:

$ sudo apt-get install mdbtools libmdbodbc1

Faire un petit programme de test qui se connecte à la base de données et affiche toutes les tables:

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

j'espère que ça a aidé.

2
répondu Menda 2014-06-07 11:01:31

personnellement, je n'ai jamais été capable d'obtenir des outils MDB (avec des outils ODBC apparentés comme unixODBC) pour fonctionner correctement avec Python ou PHP sous Linux, même après de nombreuses tentatives. Je viens d'essayer les instructions dans l'autre réponse à cette question ici et tout ce que j'ai obtenu était "Segmentation fault (core dumped)".

cependant, J'ai obtenu Jython et le pilote UCanAccess JDBC pour lire les deux .mdb et .fichiers accdb sur Linux. Pour des instructions détaillées sur la façon dont je l'ai mis en place sous Ubuntu 14.04 LTS voir mon autre réponse ici .

2
répondu Gord Thompson 2017-05-23 12:09:42

pour lire une base de données Access comme une base de données pandas (Windows).

c'est une solution très rapide et facile que j'ai utilisée avec succès pour les petites bases de données.

vous pouvez lire une base de données D'accès en faisant un lien permanent vers Excel et en sauvegardant ce fichier( cela prend quelques clics), lien ici:

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

vous pouvez alors simplement lire ce fichier Excel comme une base de données pandas.

Ainsi, par exemple, enregistrez le fichier Excel lié comme " link_to_master.xlsx' dans l'emplacement \FileStore\subfolder1\sous-dossier.

exécutez ce qui suit en 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

tenir compte de la fréquence de la liaison rafraîchissez - vous si vous visitez de nouveau votre script python. c'est-à-dire que le lien entre Excel et Access est statique.

2
répondu Tim0th1 2016-12-07 10:29:53

très probablement, vous voudrez utiliser un cadre agréable comme SQLAlchemy pour accéder à vos données, ou du moins, je le recommande. Support pour L'accès est" expérimental", mais je me souviens l'avoir utilisé sans trop de problèmes. Il utilise lui-même pyodbc sous le capot pour se connecter aux accès dbs, donc il devrait fonctionner à partir de windows, linux, os x et autres.

1
répondu Nico 2009-05-12 16:51:52

si vous synchronisez votre base de données sur le web en utilisant données EQL , alors vous pouvez interroger le contenu de vos tables D'accès en utilisant JSON ou YAML: http://eqldata.com/kb/1002 .

cet article est sur PHP, mais il fonctionnerait aussi bien en Python.

0
répondu apenwarr 2009-05-12 22:00:41

si vous avez un peu de temps libre, Vous pouvez essayer de corriger et mettre à jour cette classe de python qui lit MS-Access DBs via L'API Client natif COM32: Classe D'Extraction et de manipulation pour Microsoft Access

0
répondu ankostis 2014-09-10 19:12:11

la façon dont je connecte Python à MS Access sous Windows est en utilisant cette façon: Se connecter à MS Access avec Python . Peut-être que vous pouvez trouver des problèmes sur Win 7, donc j'ai trouvé une solution: résoudre une connexion entre MS Access et Python sur Windows 7

Je n'ai pas essayé de me connecter sous Linux!

0
répondu combuilder 2016-11-29 12:15:10