tablas para microsoft limpieza libreria leer funciones datos con python ms-access sqlalchemy pyodbc pypyodbc

para - Creación de la tabla de la base de datos de Python MS Access desde el marco de datos de Pandas usando SQLAlchemy



python base de datos access (2)

Hay un breve tutorial en el sitio web pypyodbc para ejecutar comandos SQL y llenar una base de datos de Access:

También encontré este útil artículo de wiki de Python:

Establece que mxODBC también tiene la capacidad de trabajar con MS Access. Hace mucho tiempo, creo que utilicé ADOdb con éxito para conectarme a MS Access también.

Hace unos años, SQLAlchemy tenía soporte experimental para Microsoft Access. Lo usé para mover una base de datos de Access a MS SQL Server en ese momento. Usé SQLAlchemy para autocargar / reflejar la base de datos. Fue super práctico. Creo que el código estaba en la versión 0.5. Puedes leer un poco sobre lo que hice aquí .

Intento crear una base de datos de MS Access desde Python y me preguntaba si es posible crear una tabla directamente desde un marco de datos de pandas. Sé que puedo usar la función pandas dataframe.to_sql() para escribir con éxito el dataframe en una base de datos SQLite o usando un motor sqlalchemy para algún otro formato de base de datos (pero desafortunadamente no para Access) pero no puedo obtener todas las piezas para reunirse. Aquí está el fragmento de código con el que he estado probando:

import pandas as pd import sqlalchemy import pypyodbc # Used to actually create the .mdb file import pyodbc # Connection function to use for sqlalchemy def Connection(): MDB = ''C://database.mdb'' DRV = ''{Microsoft Access Driver (*.mdb)}'' connection_string = ''Driver={Microsoft Access Driver (*.mdb)};DBQ=%s'' % MDB return pyodbc.connect(''DRIVER={};DBQ={}''.format(DRV,MDB)) # Try to connect to the database try: Conn = Connection() # If it fails because its not been created yet, create it and connect to it except: pypyodbc.win_create_mdb(MDB) Conn = Connection() # Create the sqlalchemy engine using the pyodbc connection Engine = sqlalchemy.create_engine(''mysql+pyodbc://'', creator=Connection) # Some dataframe data = {''Values'' : [1., 2., 3., 4.], ''FruitsAndPets'' : ["Apples", "Oranges", "Puppies", "Ducks"]} df = pd.DataFrame(data) # Try to send it to the access database (and fail) df.to_sql(''FruitsAndPets'', Engine, index = False)

No estoy seguro de que lo que estoy tratando de hacer sea posible con los paquetes actuales que estoy usando, pero quería verificar aquí antes de escribir mi propio marco de datos hacky para la función de tabla MS Access. Tal vez mi motor sqlalchemy está configurado mal?

Aquí está el final de mi error con mssql+pyodbc en el motor:

cursor.execute(statement, parameters) sqlalchemy.exc.DBAPIError: (Error) (''HY000'', "[HY000] [Microsoft][ODBC Microsoft Access Driver] Could not find file ''C://INFORMATION_SCHEMA.mdb''. (-1811) (SQLExecDirectW)") u''SELECT [COLUMNS_1].[TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1].[COLUMN_NAME], [COLUMNS_1].[IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], [COLUMNS_1].[ORDINAL_POSITION], [COLUMNS_1].[CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1].[COLLATION_NAME] /nFROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] /nWHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ?'' (u''FruitsAndPets'', u''dbo'')

y el error final para mysql+pyodbc en el motor:

cursor.execute(statement, parameters) sqlalchemy.exc.ProgrammingError: (ProgrammingError) (''42000'', "[42000] [Microsoft][ODBC Microsoft Access Driver] Invalid SQL statement; expected ''DELETE'', ''INSERT'', ''PROCEDURE'', ''SELECT'', or ''UPDATE''. (-3500) (SQLExecDirectW)") "SHOW VARIABLES LIKE ''character_set%%''" ()

Solo para observar, no me importa si uso sqlalchemy o pandas to_sql() Solo busco una manera fácil de obtener un dataframe en mi base de datos de MS Access fácilmente. Si eso es volcar a JSON entonces una función de bucle para insertar filas usando SQL manualmente, lo que sea, si funciona bien lo tomaré.


Para aquellos que aún están investigando esto, básicamente no se puede usar el método pandas to_sql para MS Access sin una gran dificultad. Si está decidido a hacerlo de esta manera, aquí hay un enlace donde alguien corrigió el dialecto de acceso de sqlalchemy (y presumiblemente el código del OP funcionaría con este motor):

conectando sqlalchemy a MSAccess

La mejor forma de obtener una trama de datos en MS Access es compilar las declaraciones INSERT a partir de los registros, luego simplemente conéctese mediante pyodbc o pypyodbc y ejecútelos con un cursor. Tienes que hacer inserciones de a una por vez, probablemente sea mejor dividirlas en partes (alrededor de 5000) si tienes muchos datos.