Travailler avec une base de données D'accès en Python sur une plateforme autre que Windows (Linux ou Mac))
je veux accéder aux données dans une base de données Microsoft Access. J'ai quelques .accdb et .les fichiers mdb et vous voulez les lire en Python.
d'après mes recherches, pyodbc ne peut être utilisé que sur la plate-forme Windows, mais je travaille sur Mac OS X. Je suis nouveau en Python.
l'autre option est si je pouvais exporter les données de la base de données vers un csv puis les utiliser en python.
toute aide ou démarrage serait grandement apprécié.
3 réponses
"D'après mes recherches, pyodbc ne peut être utilisé que sur la plate-forme Windows "
faux. Le principal page pyodbc dit
roues pré-compilées binaires sont fournis pour la plupart des versions de Python sur Windows et macOS. Sur les autres systèmes d'exploitation [pip install pyodbc] construira à partir de la source.
cependant, il est certainement vrai que l'utilisation ODBC pour manipuler une base de données D'accès se fait principalement sur Windows. "MDB Tools", avec" unixODBC", est souvent mentionné comme une façon de travailler avec les bases de données D'accès sur les plates-formes non-Windows, mais dans mon expérience limitée, j'ai constaté qu'il ne fonctionne vraiment pas très bien (quand il fonctionne à tous).
bien sûr, vous pouvez toujours acheter un pilote MS Access ODBC tiers pour votre plate-forme autre que Windows, mais si vous voulez une solution libre, Vous pouvez utilisez le pilote UCanAccess JDBC. Il y a deux façons d'accomplir cela: Jython , et JayDeBeApi .
dans les deux cas, vous aurez besoin de télécharger la dernière version D'UCanAccess (disponible pour le téléchargement ici ) et déballer le " bin.zip" fichier à un emplacement commode, en s'assurant de conserver la structure du dossier:
(dans les exemples suivants, je l'ai déballé en ~/Downloads/JDBC/UCanAccess
.)
Option 1: Jython
Important: les instructions suivantes s'appliquent à la version UCanAccess 3.0.5 ou à une version ultérieure.
après ...
- installation de Jython (via
sudo apt-get install jython
sur Ubuntu) et - télécharger UCanAccess et le déballer tel que décrit ci-dessus
j'ai créé le script Jython suivant nommé "dbTest.py "
from com.ziclix.python.sql import zxJDBC
jdbc_url = "jdbc:ucanaccess:///home/gord/Documents/test.accdb"
username = ""
password = ""
driver_class = "net.ucanaccess.jdbc.UcanloadDriver"
cnxn = zxJDBC.connect(jdbc_url, username, password, driver_class)
crsr = cnxn.cursor()
crsr.execute("SELECT AgentName FROM Agents")
for row in crsr.fetchall():
print row[0]
crsr.close()
cnxn.close()
et l'a lancé avec le script shell suivant
#!/bin/bash
export CLASSPATH=.:/home/gord/Downloads/JDBC/UCanAccess/loader/ucanload.jar
jython dbTest.py
Option 2: JayDeBeApi
Vous pourriez préférer cette option si vous avez besoin de travailler avec Python_3 ou préfèrent travailler avec Disponible. Vous peut installer JayDeBeApi avec pip
. Si vous n'avez pas déjà installé un environnement JRE (Java Runtime Environment), vous en aurez aussi besoin. (J'ai utilisé sudo apt install default-jre
sur Ubuntu.)
une fois que les composants requis sont en place, vous devriez pouvoir utiliser le code suivant:
import jaydebeapi
ucanaccess_jars = [
"/home/gord/Downloads/JDBC/UCanAccess/ucanaccess-4.0.2.jar",
"/home/gord/Downloads/JDBC/UCanAccess/lib/commons-lang-2.6.jar",
"/home/gord/Downloads/JDBC/UCanAccess/lib/commons-logging-1.1.1.jar",
"/home/gord/Downloads/JDBC/UCanAccess/lib/hsqldb.jar",
"/home/gord/Downloads/JDBC/UCanAccess/lib/jackcess-2.1.6.jar",
]
classpath = ":".join(ucanaccess_jars)
cnxn = jaydebeapi.connect(
"net.ucanaccess.jdbc.UcanaccessDriver",
"jdbc:ucanaccess:///home/gord/test.accdb;newDatabaseVersion=V2010",
["", ""],
classpath
)
crsr = cnxn.cursor()
try:
crsr.execute("DROP TABLE table1")
cnxn.commit()
except jaydebeapi.DatabaseError as de:
if "user lacks privilege or object not found: TABLE1" in str(de):
pass
else:
raise
crsr.execute("CREATE TABLE table1 (id COUNTER PRIMARY KEY, fname TEXT(50))")
cnxn.commit()
crsr.execute("INSERT INTO table1 (fname) VALUES ('Gord')")
cnxn.commit()
crsr.execute("SELECT * FROM table1")
for row in crsr.fetchall():
print(row)
crsr.close()
cnxn.close()
sur Mac OSx, je préfère utiliser pandas_access
de la documentation:
import pandas_access as mdb
# Listing the tables.
for tbl in mdb.list_tables("my.mdb"):
print(tbl)
# Read a small table.
df = pandas_access.read_table("my.mdb", "MyTable")
cette question Est ancienne mais la documentation dit:
la façon la plus facile d'Installer est d'utiliser pip. Windows binaires seront téléchargés, mais d'autres systèmes d'exploitation devront compiler à partir de la source.
donc ça devrait être possible. Il y a aussi un exemple pour les machines linux.
http://mkleehammer.github.io/pyodbc/#connecting
mais vérifiez cette partie de la source.
https://github.com/mkleehammer/pyodbc/blob/master/tests2/accesstests.py#L630,L636
il vous montre à quoi ressemble la chaîne de connexion pour les fichiers MS Access.