Si estas familiarizado con las bases de datos y sentencias SQL, podrás acceder a esta base de datos sin necesidad de utilizar como IDE a Microsoft Access, ya que a través del estándar ODBC (Open DataBase Connectivity) podemos conectarnos, incluso desde otros sistemas operativos diferentes a Windows.
Gracias a ODBC, no importa qué motor de base de datos se utilice, ya que el sistema de acceso es independiente. Simplemente hay que indicar el controlador específico para la base de datos.
Para usar ODBC para conectarnos con nuestra base de datos desde Windows, Linux u otro sistema operativo, necesitamos el módulo de Python pyodbc. Con él podremos añadir registros, realizar consultas, eliminar elementos, etc. Visita su página de descargas e instala aquella que concuerde con tu sistema operativo y con la arquitectura de tu equipo.
¿Cómo implementarlo en Python? Veamos un ejemplo con una base de datos de frutas:
#!/usr/bin/python # -*- coding: cp1252 -*- # devuelve la ruta actual completa. from os import getcwd # módulo para BBDD SQL import pyodbc # Nombre del controlador de la base de datos Access. DRIVER_NAME = "Microsoft Access Driver (*.mdb, *.accdb)" # Ruta completa de la base de datos. DB_PATH = getcwd() + "\MiBDdeFrutas.accdb" # Establecer la conexión con BD. conn = pyodbc.connect("Driver={%s};DBQ=%s;" % (DRIVER_NAME, DB_PATH)) # Crear cursor para ejecutar consultas. cursor = conn.cursor() # Agregar una fruta en nuestra base de datos: nombre = "Platano" calorias = "90" origen = "Canarias" color="amarillo" # Ejecutar sentencia: cursor.execute("INSERT INTO frutas (nombre, calorias, origen) VALUES (?, ?, ?)", nombre, calorias, origen) # Guardar los cambios. cursor.commit() # Ejecutar consulta: q = cursor.execute("SELECT * FROM frutas WHERE color = 'amarillo'") rows = q.fetchall() # Recorrer cada una de las filas e imprimirlas en pantalla. if rows is not None: for row in rows: print "Nombre: %s | Calorias: %s" % (row.nombre, row.calorias) else: print("No hay datos en la tabla.") # Cerrar cursor cursor.close() # Cerrar conexion conn.close()
Vemos que hay que especificar la ruta completa del archivo de la base de datos y el controlador correspondiente de nuestra base de datos Access. Creamos una conexión para gestionar la base de datos y un cursor para realizar las consultas necesarias a la misma. El cursor nos permite ejecutar las sentencias SQL que queramos.
Con cursor.execute(), por medio de signos de interrogación podemos pasar los valores correspondientes, evitando el formateo de cadenas y las vulnerabilidades en código, como por ejemplo SQLi.
Si necesitas hacer consultas masivas con un gran volumen de datos, hacer un script con Python puede facilitar mucho la tarea.
¿Cómo utilizas pyodbc? Cuéntanoslo.
muy bueno
Buenas, estaba buscando esto que comentas, pero un poco distinto:
Se programar en BASH y hago muchas maravillas pero estoy empezando en django y python.
Estoy buscando algo que haciendo un bucle mire toda una base de datos y revise los valores, …si se cumple la condición lanza un script en 2º plano, ….y así con todas las filas, ….el ejemplo es este:
Sólo necesito que en una base de datos hayan 3 filas, cada una con un valor, …y que revise esas 3 filas de la base de datos (que ya será más grande), …un usuario con 500, otro con 600 y otro con 700, …
Y el valor para comparar lo mira en un TXT, …imaginando 550, ….si es menor de 550 lanza un comando en 2º plano que corresponde a la fila que tiene el valor 500.
Parto de 0 en django y python, y quisiera tener una base.
Un saludo y muchas gracias
file = open(“archivo.txt”, “r”)
valor = int(file.read())
if (valor < 550): consulta = ...#consulta DB cuyas columna x < 550 for linea in consulta: #operacion con cada linea que cumpla tu condicion
Buenas,
al ejecutar esta sentencia INSERT INTO desde Python con pyodbc me da el siguiente error. Si le quito los corchetes me da algunos nombres son érroneos.
…
print (values)
insert_sql=’INSERT INTO [PREINSCRIPCIO_BAREM_FP_CFAS] ‘+fields + ‘ VALUES ‘+values+’;’
print (insert_sql)
cursor.execute(insert_sql)
…
Este es el resultado del print (insert_sql). Si ejecuto la sentencia en Acces directamente me da correcto.
INSERT INTO [PREINSCRIPCIO_BAREM_FP_CFAS] ([ANY-CONVOCATORIA], [CONVOCATORIA], [SOLICITUD], [TIPUS_SOL], [ESTAT_SOL], [TANCAMENT], [NOM], [1R_COGNOM], [2N_COGNOM], [RALC], [T_ALUMNE_CIUTADA], [T_ALUMNE], [CODI_CENTRE_P1], [NOM_CENTRE_P1], [MUNICIPI_CENTRE_P1], [COMARCA_CENTRE_P1], [Naturalesa P1], [SSTT_CENTRE_P1], [CODI_ENSENYAMENT], [NOM_ENSENYAMENT], [CODI_MODALITAT], [MODALITAT], [CURS], [REGIM_P1], [TORN_P1], [FORA_TERMINI], [PENALITZA_DUPLICAT], [AMB_RECLAMACIONS], [RECLAMACIONS_TRACTADES], [VIA_ACCES_AL], [VIA_ACCES_VALIDADA], [NOTA_ALEGADA], [ANY_CURS_RECUPERAT], [ORIGEN_NOTA_RECUPERADA], [NOTA_RECUPERADA], [NOTA_VALIDADA], [NUMERO_DESEMPAT], [EXISTEIX_GERMA], [NUM_REGISTRE_ENTRADA_SORCAT], [OFICINA], [DATA_ENTRADA_REGISTRE], [DATA_PRESENTACIO], [DATA_ENVIAMENT_DADES]) VALUES (2024,»CFAS 24-25 – Cicles d’arts plàstiques i disseny de grau superior»,»PRE24-2500297152″,»SE»,»Validada»,»nan»,»Pierinna Carlota»,»Ballesteros»,»Balducci»,»4580465094″,»Ordinari»,»Ordinari»,»8038545″,»EA Municipal Arsenal»,»Vilafranca del Penedès»,»Alt Penedès»,»Públic»,»Penedès»,»CFAS CGE0″,»Gràfica impresa»,»nan»,»nan»,»1″,»Diürn»,»Matí i tarda»,»No»,»No»,»Sí»,»Sí»,»2″,»2.0″,»9.0″,»nan»,»nan»,»0.0″,»6.88″,»nan»,»nan»,»604847″,»9004″,»2024-05-28 15:31:00″,»2024-05-28 00:00:00″,»2024-05-28 00:00:00″)
Traceback (most recent call last):
File «C:\Users\52420407a\Documents\Python_scripts\miau_acces.py», line 51, in
cursor.execute(insert_sql)
pyodbc.ProgrammingError: (‘42000’, «[42000] [Microsoft][Controlador ODBC Microsoft Access] Corchetes no válidos en el nombre ‘[2.0]’. (-1002) (SQLExecDirectW)»)
Gracias