我尝试从我的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。