熊猫read_sql_table永不解决

时间:2018-12-14 20:30:31

标签: python mysql pandas

我正在尝试使用SQL和Pandas。 遵循sql queries和相关sqlalchemy engine specification guide

的熊猫指南
from sqlalchemy import create_engine
'''
example from sqlalchemy guide, engine_spec has the form of:

    dialect+driver://user:password@host:port/name

where leaving out "+driver" defaults to whatever the SQLAlchemy choose for dialect  
''' 

my_engine_spec = 'mysql://user:password@host:port/name'
engine = create_engine(my_engine_spec)

data = pd.read_sql_table(table_name, engine, chunksize=10)

注意事项:

  • 我将chunksize限制为10,并且该表中有10条以上的记录。这是为了进行测试以确保代码能够在不等待数据转储的情况下正常工作...但是仍然无法解决

  • 我正在使用mysql和默认驱动程序,经历了用python3 +在macOS上安装它的痛苦过程

  • 我等待了5分钟以上才能终止脚本。

  • 我可以使用具有相同规格的所选SQL DB可视化应用程序(例如Sequel Pro)即时查看数据,因此假设变量my_engine_spec是正确的。

为什么要花这么长时间甚至无法解决?我如何加快速度?

1 个答案:

答案 0 :(得分:0)

  

我将块大小限制为10,并且表中有10条以上的记录。

熊猫以块的形式读取整个表,每个块有10条或更少的记录。当您指定chunksize时,pandas.read_sql_table将返回一个生成器。

data = pd.read_sql_table(table_name, engine, chunksize=10)
[data.__next__() for _ in range(1)] # only read one chunk, 10 records or less
  

我等待了5分钟以上才能终止脚本。

read_sql_table将读取整个表和所有记录。这意味着,如果要使用read_sql_table一个非常大的表,然后选择特殊的列,则与在mysql中完成该表相比,您将花费更多的时间和内存。 为什么花这么长的时间与通过代码执行的操作有关 ,如果只运行示例代码显示的内容,那应该很快(我已经尝试阅读50万条记录,但只需几秒钟)

  

为什么要花这么长时间甚至无法解决?

如果不需要所有记录,请使用read_sqlread_sql_query来运行查询。因为MySQL做得很好。