2017-03-06 2 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; 

그런 다음 파이썬 팬더에서, 새로운 표를 참조 AFAIK에는'MS Access'에'INFORMATION_SCHEMA' 같은 것이 없습니다 ... – MaxU

답변

1

MS Access에서 시스템 테이블 MSysObjects을 사용하여 데이터베이스의 메타 데이터를 검색 할 수 있습니다. 아래의 모든 테이블 이름을 검색하는 DML 호출입니다 :

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

그러나 기본적으로이 권한은 허용되지 않습니다 당신이 파이썬에서와 같은 외부 ODBC 호출 작동하지 않습니다.

부여 권한이 은 필요

MSACCESS.EXE GUI, 개방 데이터베이스 내부

과 (독립형 모듈) VBA 서브 루틴을 실행 (관리자 사용자)를 실행 할 : 두 개의 경로를 고려 해결하려면 한 번 :

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

    CurrentProject.Connection.Execute strSQL 
End Sub 

위의 쿼리를 실행 한 후 팬더 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() 
관련 문제