Damos créditos a pbdany
1. Instalar la libreria JayDeBeApi en el entorno virtual
# Activamos el entorno virtual (en mi caso es .venv)
source .venv/bin/activate
# Instalamos la librería
pip install JayDeBeApi
2. Descargar la librería UCanAccess
Para ello vamos a sourceforge y la descargamos en una carpeta. En mi caso la he descargado en la carpeta "jar" dentro del proyecto de python. Hay que tener cuidado a la hora de definir las rutas a dichas librerias
En mi caso se ha descargado así
3. Descargarse Java y crear la variable JAVA_PATH
Nos descargamos Java Open JDK por ejemplo de OpenLogic ( y yo personalmente he descargado la version 17 en "/home/ximo/jdk/jdk17/")
En mi caso el ejecutable java es "/home/ximo/jdk/jdk17/bin/java"
y creamos el JAVA_PATH a dicha localización
# Creamos la variable de entorno JAVA_PATH
export JAVA_PATH=/home/ximo/jdk/jdk17/bin
# Comprobamos su valor
echo $JAVA_PATH
4. Código fuente del programa python
Se va a convertir un fichero ACCESS a CSV.
Hay que tener en cuenta lo siguiente:
- Comprobar todas las rutas a los jars. si hay algún error en alguna de ellas, dará un error como que no encuentra alguna librería para abrir dicho fichero de BD
- Dar correctamente los nombres de los ficheros de entrada (tipo mdb) como los de salida (tipo csv)
- Dar el nombre de tabla o vista correcto al pasar la sentencia SQL al cursor.
- Configurar el csv.writer para definirle el delimitador (en mi caso ";") y si queremos entrecomillar los campos de caracteres.
- Utilizar convenientement el csv.writer para escribir títulos y filas
import jaydebeapiimport sysimport osimport csv# Access DB fileDBFile='/home/ximo/Baixades/EMCO_09_2024_0000000008.mdb'# CSV output fileCSVFile='/home/ximo/Baixades/DATOS_PERS.csv'# Initiate Java runtime file locationUCanVer='5.0.1'lang3Ver='3.8.1'logVer='1.2'hsqlVer='2.5.0'jackVer='3.0.1'# Cpnfigure path for jar filesconfigPath = sys.path[0] + os.sep+".."+os.sep+'jars' + os.sep + 'UCanAccess-'+ UCanVer +os.sepucanaccess_jars = [configPath+"ucanaccess-" +UCanVer +".jar",configPath+"lib/commons-lang3-" +lang3Ver+".jar",configPath+"lib/commons-logging-"+logVer +".jar",configPath+"lib/hsqldb-" +hsqlVer +".jar",configPath+"lib/jackcess-" +jackVer +".jar",]# classpath = $PATH$ parameters for Java runtime file locationclasspath = ":".join(ucanaccess_jars)# Initate connection to MS Access filescnxn = jaydebeapi.connect("net.ucanaccess.jdbc.UcanaccessDriver","jdbc:ucanaccess://"+DBFile,["", ""],classpath)# From connection initiate cursorcursor = cnxn.cursor()# Run Querycursor.execute("SELECT * FROM DATOS_PERS")fieldNames= ",".join([i[0] for i in cursor.description])with open(CSVFile,'w') as f:writer = csv.writer(f,dialect='excel',delimiter=';',doublequote=True,quoting=csv.QUOTE_NONNUMERIC)# Generamos cabecera de nombres de camposwriter.writerow([i[0] for i in cursor.description])# Generamos las filas de datoswriter.writerows(row for row in cursor.fetchall())# Fetch Query result#for row in cursor.fetchall():# print(row)# Close cursorcursor.close()# Close connectioncnxn.close()