2017-09-12 5 views
0

MS Access 데이터베이스의 테이블 데이터를 데이터 프레임 형태로 팬더에 가져 오는 간단한 작업을 수행하고 싶습니다. 나는 최근에이 작업을 훌륭하게 수행했으며, 이제 더 이상 작동하지 않는 이유를 알 수 없습니다. 처음에는 연결 문제를 해결할 때 올바른 bitness를 가진 새로운 microsoft 데이터베이스 드라이버를 설치해야 할 필요가있는 작업이 있었기 때문에 다시 살펴보고 드라이버를 다시 설치해야한다는 것을 기억합니다. 아래는 내가 설정에 사용하는 것입니다.PYODBC를 사용하여 팬더에 액세스 데이터베이스 테이블을 읽는 중 오류가 발생했습니다

  • OS : 윈도우 7 프로페셔널 64 비트 (2017년 9월 6일을 확인)
  • Access 버전 : 노트북에 설치의

    기록 액세스 2016 32 비트

  • (2017년 9월 6일을 확인)
  • 파이썬 버전 : 파이썬 3.6.1 (64 비트)에 필요한 AccessDatabaseEngine가 설치
  • 윈도우 데이터베이스 엔진 드라이버 위의 파이썬 비트 수를 기반으로합니다
  • (2017년 9월 11일을 확인) 파이썬 -V>를 사용하여 발견 AccessDatabaseEn 사용 gine_X64.exe은 (2017년 9월 11일을 확인)> AccessDatabaseEngine_X64.exe/수동을 사용하여 2010 릴리스

에서 나는 테스트 데이터베이스에 대한 연결을 시도하기 위해 다음과 같은 간단한 테스트 코드를 실행하고 있습니다.

import pyodbc 
import pandas as pd 

[x for x in pyodbc.drivers() if x.startswith('Microsoft Access Driver')] 

반환 :

['Microsoft Access Driver (*.mdb, *.accdb)'] 

연결 문자열을 설정. TestTable1에 연결을 시도

TestTable1 

아래의 오류가 있습니다 :

dbpath = r'Z:\1Users\myfiles\software\JupyterNotebookFiles\testDB.accdb' 
conn_str = (r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};''DBQ=%s;' %(dbpath)) 
cnxn = pyodbc.connect(conn_str) 
crsr = cnxn.cursor() 

for table_info in crsr.tables(tableType='TABLE'): 
    print(table_info.table_name) 

반환 ...의 I는 DB에 연결하고 있음을 확인.

dfTable = pd.read_sql_table(TestTable1, cnxn) 

--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
<ipython-input-14-a24de1550834> in <module>() 
----> 1 dfTable = pd.read_sql_table(TestTable1, cnxn) 
     2 #dfQuery = pd.read_sql_query("SELECT FROM [TestQuery1]", cnxn) 

NameError: name 'TestTable1' is not defined 

작은 따옴표로 다시 시도하면 아래 오류가 표시됩니다.

dfTable = pd.read_sql_table('TestTable1', cnxn) 

--------------------------------------------------------------------------- 
NotImplementedError      Traceback (most recent call last) 
<ipython-input-15-1f89f9725f0a> in <module>() 
----> 1 dfTable = pd.read_sql_table('TestTable1', cnxn) 
     2 #dfQuery = pd.read_sql_query("SELECT FROM [TestQuery1]", cnxn) 

C:\Users\myfiles\Anaconda3\lib\site-packages\pandas\io\sql.py in read_sql_table(table_name, con, schema, index_col, coerce_float, parse_dates, columns, chunksize) 
    250  con = _engine_builder(con) 
    251  if not _is_sqlalchemy_connectable(con): 
--> 252   raise NotImplementedError("read_sql_table only supported for " 
    253         "SQLAlchemy connectable.") 
    254  import sqlalchemy 

NotImplementedError: read_sql_table only supported for SQLAlchemy connectable. 

나는 드라이버 문제로 돌아가서 행운없이 32 비트 버전을 다시 설치하려고했습니다.

아무도 아이디어가 있습니까? pandas.read_sql_table의 문서 당

답변

0

: 테이블 이름과하게 연결된 SQLAlchemy의 주어

가하는 DataFrame을 반환

. 이 함수는 DBAPI 연결을 지원하지 않습니다.

pyodbc이 DBAPI이기 때문에이 쿼리 방법을 사용 pandas.read_sql사기꾼 인수가 지원 DBAPI 않는 : 그것을했다

dfTable = pd.read_sql("SELECT * FROM TestTable1", cnxn) 
+0

합니다. 환상적입니다, 고마워요! – talidridae