SAWarning:当我使用 sqlalchemy 和 pd.io.sql.read_sql 时,无法实例化类型 <class 'sqlalchemy.sql.sqltypes.INTEGER



我尝试从我的SQLite表中读取pandas DataFrame。当我运行

下面的代码时
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_)

查看我在github上的问题了解更多细节。

我做错了什么?这是臭虫吗?

好的,所以看看github,似乎你的问题解决了。为了记录,让我简单地总结一下发生了什么。

正如我们从#7396中知道的,pandas在每次 read_sql_table调用时反省所有表。

另一件事是,您的数据库包含一个表,其中列的类型由sqlite报告为"INT(4)"。

SqlAlchemy(由pandas在底层使用)sqlite方言将"(4)"部分解释为传递给其类型构造函数的参数。但是sqlalchemy.sql.sqltypes.INTEGER的构造函数不接受任何参数,这会导致警告并有效地忽略这些参数,将INT(4)视为INT。

最新更新