Comment accéder aux bases de données Microsoft Access en Python? Avec SQL?
Je préférerais une solution fonctionnant sous Linux, mais je pourrais aussi choisir Windows.
Je n'ai besoin que d'un accès en lecture.
J'ai utilisé PYODBC pour me connecter avec succès à une base de données MS Access - sous Windows. L'installation a été facile, l'utilisation est assez simple, il vous suffit de définir la chaîne de connexion appropriée (celle pour MS Access est indiquée dans la liste) et vous en donnez l'exemple.
Sous Linux, MDBTools est votre seule chance pour le moment. [contesté]
Sous Windows, vous pouvez gérer les 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émystifie complètement les fonctions de support technique de pypyodbc.
Disclaimer: Je suis le développeur de pypyodbc.
Que diriez-vous de pyodbc ? Cette SO question montre qu'il est possible de lire MS Access en l'utilisant.
Vous avez ce qui semble être de bonnes solutions. MDB Tools est un autre outil plus proche du "métal" que vous ne le souhaiteriez.
Outils MDB est un ensemble de bibliothèques et d’utilitaires à code source ouvert destinés à faciliter l’exportation de données à partir de bases de données MS Access (fichiers mdb) sans utiliser les DLL Microsoft. Ainsi, les systèmes d'exploitation autres que Windows peuvent lire les données. Ou, pour le dire autrement, ils sont en train de procéder à l’ingénierie inverse de la présentation du fichier MDB.
Notez également que je doute qu’ils aient commencé à travailler sur les fichiers de la base de données ACCDB et il n’y aura probablement pas beaucoup de demandes pour cette fonctionnalité.
Vieille question, mais je pensais publier une suggestion alternative de pypyodbc pour Windows: ADO. En fin de compte, il est très facile d'accéder aux bases de données Access, aux feuilles de calcul Excel et à tout ce qui existe avec un pilote moderne (par opposition au pilote ODBC classique) via COM.
Découvrez les articles suivants:
Personnellement, je n’ai jamais réussi à faire fonctionner correctement les outils MDB (ainsi que des éléments connexes ODBC comme unixODBC) avec Python ou PHP, 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 "Défaut de segmentation (core dumped)".
Cependant, j’ai demandé à Jython et au pilote UCanAccess JDBC de lire les fichiers .mdb et .accdb sous Linux. Pour des instructions détaillées sur la manière de l’installer sous Ubuntu 14.04 LTS, voir mon autre réponse ici .
Pour lire une base de données Access en tant que base de données pandas (Windows).
C’est une solution très simple et rapide que j’ai utilisée avec succès pour des bases de données plus petites.
Vous pouvez lire une base de données Access en créant un lien permanent vers Excel et en enregistrant ce fichier (cela prend quelques clics), lien ici:
Vous pouvez alors simplement lire ce fichier Excel en tant que cadre de données pandas.
Par exemple, enregistrez le fichier Excel lié sous le nom "link_to_master.xlsx" dans 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
Pensez à la fréquence d'actualisation du lien si vous visitez de nouveau votre script python. Le lien entre Excel et Access est statique.
Sur Ubuntu 12.04, c’est ce que j’ai fait pour que cela fonctionne.
Installez pyodbc:
$ Sudo apt-get install python-pyodbc
Suivez l'installation de pilotes supplémentaires:
$ Sudo apt-get install mdbtools libmdbodbc1
Faites 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é.
Très probablement, vous voudrez utiliser un framework Nice comme SQLAlchemy pour accéder à vos données, ou du moins, je le recommanderais. Support for Access est "expérimental", mais je me souviens de l’avoir utilisé sans trop de problèmes. Il utilise lui-même pyodbc sous le capot pour se connecter à Access dbs;.
Si vous synchronisez votre base de données sur le Web à l'aide de EQL Data , vous pouvez alors interroger le contenu de vos tables Access à l'aide de JSON ou YAML: http://eqldata.com/kb/1002 .
Cet article concerne PHP, mais il fonctionnerait aussi bien en Python.
La façon dont je connecte Python à MS Access sous Windows est la suivante: Connexion à MS Access avec Python . Peut-être que vous pouvez trouver quelques problèmes sur Win 7, j'ai donc trouvé une solution: Résolution d'un problème connexion entre MS Access et Python sous Windows 7
Je n'ai pas essayé de me connecter sous Linux!
Si vous avez du temps libre, vous pouvez essayer de corriger et de mettre à jour cette classe python qui lit les bases de données MS-Access via l'API cliente COM32 native: Classe d'extraction et de manipulation pour Microsoft Access