8

Python から MS Access データベースを作成しようとしていますが、pandas データフレームから直接テーブルを作成できるかどうか疑問に思っていました。pandas 関数を使用dataframe.to_sql()して、データフレームを SQLite データベースに正常に書き込むことができること、または他のデータベース形式 (残念ながら Access ではありません) に sqlalchemy エンジンを使用することによって、データフレームを正常に書き込むことができることはわかっていますが、すべての部品をまとめることはできません。私がテストしてきたコードスニペットは次のとおりです。

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)

私がやろうとしていることが、現在使用しているパッケージでも可能かどうかはわかりませんが、独自のハッキーデータフレームを MS Access テーブル関数に書き込む前に、ここで確認したかったのです。sqlalchemy エンジンの設定が間違っているのではないでしょうか?

mssql+pyodbcエンジンでの私のエラーの終わりは次のとおりです。

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')

mysql+pyodbcエンジンの終了エラー:

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%%'" ()

sqlalchemy を使用するか pandas を使用するかは気にしませんto_sql()。MS Access データベースにデータフレームを簡単に取得する簡単な方法を探しているだけです。それが JSON へのダンプである場合は、SQL を使用して手動で行を挿入するループ関数を使用します。うまく機能する場合は、それを使用します。

4

2 に答える 2

3

pypyodbc Web サイトには、SQL コマンドを実行して Access データベースにデータを入力するための短いチュートリアルがあります。

また、次の便利な Python wiki 記事も見つけました。

mxODBCには MS Access と連携する機能もあると記載されています。ずっと前に、ADOdbを使用して MS Access に接続することにも成功したと思います。

数年前、SQLAlchemy は Microsoft Access を実験的にサポートしていました。当時、Access データベースを MS SQL Server に移動するために使用しました。SQLAlchemy を使用してデータベースを自動ロード/反映しました。とても便利でした。コードはバージョン 0.5 だったと思います。ここで私が何をしたかについて少し読むことができます。

于 2014-12-18T21:48:33.163 に答える