我正在尝试使用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
是正确的。
为什么要花这么长时间甚至无法解决?我如何加快速度?
答案 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_sql
或read_sql_query
来运行查询。因为MySQL做得很好。