Python MS Access-Datenbank-Tabelle-Erstellung Von Pandas Dataframe Mit SQLAlchemy
Ich versuche zum erstellen einer MS Access-Datenbank von Python und Frage mich, ob es möglich ist eine Tabelle erstellen, die direkt aus ein pandas dataframe. Ich weiß, dass ich pandas dataframe.to_sql()
Funktion erfolgreich schreiben dataframe um eine SQLite-Datenbank oder durch eine Verwendung von sqlalchemy Motor für einige andere Datenbank-format (aber nicht auf leider), aber ich kann nicht alle Stücke teilen, zusammen zu kommen. Hier der code-snippet, dass ich habe getestet mit:
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)
Ich bin mir nicht sicher, dass das, was ich versuche zu tun, ist sogar möglich, mit der aktuellen Pakete, die ich verwende, aber ich wollte überprüfen, bevor ich hier Schreibe meine eigenen hacky-dataframe zu MS Access-Tabelle Funktion. Vielleicht ist meine sqlalchemy-engine eingerichtet ist falsch?
Hier das Ende meiner Fehler mit mssql+pyodbc
im 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')
und das Ende Fehler für mysql+pyodbc
im 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%%'" ()
Nur der Hinweis, es ist mir egal, wenn ich sqlalchemy oder pandas to_sql()
ich bin auf der Suche nach einige einfache Weg, um ein dataframe in meinem MS Access-Datenbank leicht. Wenn das dump zu JSON dann eine loop-Funktion zum einfügen von Zeilen mithilfe von SQL manuell, was auch immer, wenn es gut funktioniert, werde ich es nehmen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für diejenigen, die noch auf der Suche in dieser, im Grunde, können Sie nicht verwenden, pandas to_sql-Methode für MS-Access ohne große Schwierigkeiten. Wenn Sie entschlossen sind, es zu tun auf diese Weise, hier ist ein link, wo jemand fest sqlalchemy Zugang Dialekt (und vermutlich auch den OP-code funktionieren würde, mit diesem Motor):
Anschluss von sqlalchemy zu MSAccess
Der beste Weg, um einen Daten-frame in MS Access zum erstellen des INSERT-Statements aus den Aufzeichnungen, dann verbinden Sie einfach über pyodbc oder pypyodbc, und führen Sie Sie mit einem cursor. Sie haben zu tun, fügt ein zu einer Zeit, die wahrscheinlich am besten brechen Sie diese in Stücke (etwa 5000), wenn Sie eine Menge von Daten.
sqlalchemy.dialects.access
)to_sql
. Details hier.Gibt es eine kurze Anleitung, die pypyodbc website für die Ausführung von SQL-Befehlen und das Auffüllen einer Access-Datenbank:
Fand ich auch dieses nützliche Python-wiki-Artikel:
Es besagt, dass mxODBC hat auch die Fähigkeit zur Arbeit mit MS Access. Vor langer Zeit, ich glaube, dass ich erfolgreich verwendet ADOdb Verbindung zu MS Access als auch.
Vor ein paar Jahren, SQLAlchemy hatte sich aus durch experimentellen support für Microsoft Access. Ich benutzte es, um verschieben einer Access-Datenbank auf MS SQL Server zur Zeit. Ich benutzt SQLAlchemy zu autoload /spiegeln der Datenbank. Es war super praktisch. Ich glaube, der code wurde in der version 0.5. Lesen Sie ein bisschen über was, was ich Tat hier.