2017-09-12 140 views
0

我想要執行一個簡單的任務,將表格數據從MS Access數據庫以數據框的形式導入Pandas。我最近做了很棒的工作,現在我無法弄清楚它爲什麼不能工作。我記得最初在解決連接故障時,我需要在安裝新的Microsoft數據庫驅動程序時使用正確的位來做些工作,所以我重新訪問並重新安裝了驅動程序。以下是我用於設置的內容。嘗試使用PYODBC將Access數據庫表讀入Pandas

記錄上安裝的筆記本電腦:

  • 操作系統:Windows 7專業版64位(驗證2017年9月6日)
  • Access版本:訪問2016 32位(驗證2017年9月6日)
  • Python版本:Python之3.6.1(64位),使用>
  • 所需的AccessDatabaseEngine將基於安裝了Python位數以上
  • Windows數據庫引擎驅動器的Python -V(認證2017年9月11日)中找到與AccessDatabaseEn gine_X64.exe使用> AccessDatabaseEngine_X64.exe /無源(確認2017年9月11日)

2010版本我運行以下簡單的測試代碼嘗試到測試數據庫的連接。

import pyodbc 
import pandas as pd 

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

回報:

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

設置連接字符串。

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) 

回報:

TestTable1 

試圖連接到TestTable1給下面的錯誤。

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位版本沒有任何運氣。

有人有什麼想法嗎?

回答

0

pandas.read_sql_table文檔:

給定一個表名和SQLAlchemy的連接,返回一個數據幀。 此函數不支持DBAPI連接。

由於pyodbc是DBAPI,使用查詢方法,pandas.read_sql其中CON說法不支持DBAPI:

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

這做到了。太棒了,謝謝! – talidridae

相關問題