2017-03-06 8 views
0

Pandas.read_sqlを使用してデータベースからテーブル名をリストに読み込もうとしています。 私が試してみました別のSQLクエリは、オンラインで見つける:pandasのテーブル名のsqlクエリ

 cnxn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ=' + str(self.file_selected)+';Uid=Admin;Pwd=; ') 
    # sql = "SELECT * FROM SYS.TABLES" # tried this - also an error 

    sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='database_name.MDB'" 
    self.TableNames = pd.io.sql.read_sql(sql, cnxn) 
    cnxn.close() 

が、私はそれがファイルdatabase_name.INFORMATION_SCHEMA.TABLES

私はSQLクエリのために使用すべきか

を見つけることができないというエラーが出ますか?

+1

SELECT MSysObjects.Name INTO DBTables FROM MsysObjects WHERE ((MSysObjects.Type)=1) ORDER BY MSysObjects.Name; 

が続いてPythonのパンダで、新しいテーブルを参照してください。 AFAIKには 'MS Access'に' INFORMATION_SCHEMA'というものはありません... – MaxU

答えて

1

MS Accessでは、システムテーブルMSysObjectsを使用して、データベースのメタデータを取得できます。以下は、すべてのテーブル名を取得するために、DML呼び出しです:

SELECT MSysObjects.Name 
FROM MsysObjects 
WHERE ((MSysObjects.Type)=1) 
ORDER BY MSysObjects.Name; 

ただし、デフォルトではこれは許可が許可されていないとして、あなたはPythonで行うなどの外部ODBC呼び出しでは動作しません。 、解決する二つの経路を検討するには:MSACCESS.EXE GUI、オープンデータベース内部(管理ユーザー用)

GRANT権限

をしてのみ実行する必要があります(スタンドアロンモジュールで)VBAのサブルーチンを実行します一度:

Public Sub GrantMSysPermission() 
    Dim strSQL As String 
    strSQL = "GRANT SELECT ON MSysObjects TO Admin;" 

    CurrentProject.Connection.Execute strSQL 
End Sub 

pandas read_sqlで上記のクエリを実行すると完了します。

保存された表

インサイドMS ACCESS.EXE GUIプログラム、テーブル作成クエリの下に実行します。

cnxn = pyodbc.connect('DRIVER={{Microsoft Access Driver (*.mdb)}};DBQ=' + \ 
         '{};Uid=Admin;Pwd=;'.format(str(self.file_selected))) 

sql = "SELECT * DBTables" 
self.TableNames = pd.io.sql.read_sql(sql, cnxn) 
cnxn.close() 
関連する問題