2014-06-07 25 views
2

我嘗試從我的SQLite表中讀取pandas DataFrame。當我運行下面SAWarning:當我使用sqlalchemy和pd.io.sql.read_sql時,無法實例化<class'sqlalchemy.sql.sqltypes.INTEGER'>

import pandas as pd 
import sqlalchemy 

dbname = "sqlite:////Users/leda/home/Magnetic_stars/SQLite/Magnetic_stars.sqlite" 
engine = sqlalchemy.create_engine(dbname) 
res = pd.io.sql.read_sql("SELECT * FROM Resolved;", engine) 

的代碼,我得到SAWarning:

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sqlalchemy/dialects/sqlite/base.py:860: SAWarning: Could not instantiate type <class 'sqlalchemy.sql.sqltypes.INTEGER'> with reflected arguments [u'4']; using no arguments. 
coltype = self._resolve_type_affinity(type_) 
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sqlalchemy/dialects/sqlite/base.py:860: SAWarning: Could not instantiate type <class 'sqlalchemy.sql.sqltypes.INTEGER'> with reflected arguments [u'2']; using no arguments. 
coltype = self._resolve_type_affinity(type_) 

看到我issue on github瞭解更多詳情。

我在做什麼錯?這是一個錯誤?

+0

你可以試試以下嗎? 1.使用調試器運行腳本:python -m pdb ./script.py 2.在調試器控制檯中執行'b sqlalchemy/dialects/sqlite/base.py:913,coltype == sqltypes.INTEGER'(不含引號) 3.按c讓調試器運行你的程序 4.執行應該在base.py的第913行停止 - 看看變量type_的值是多少(例如'print type_') – zifot

+0

@zifot,對不起我的延遲與答案。我得到INT(4)。 – drastega

回答

1

好吧,看着github好像你的問題解決了。爲了記錄,讓我簡要總結一下發生的事情。

當我們從#7396知道,熊貓是反思所有 read_sql_table調用表。

另一件事是你的數據庫包含一個表格,其中一列由sqlite報告爲「INT(4)」。

SqlAlchemy(引擎蓋下的熊貓使用)sqlite方言interprets the "(4)" part as an argument to be passed to its type constructor。但是sqlalchemy.sql.sqltypes.INTEGER的構造函數沒有采用任何參數,並且causes a warning並有效地忽略了這些參數,將INT(4)視爲INT。

相關問題