我正在试验sql和pandas。遵循pandas指南中的sql查询和相关的 sqlalchemy
发动机技术规格指南
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)
注意事项:
i限制 chunksize
表中有10条以上的记录。这是为了测试,以确保代码工作而不等待数据转储。。。但尽管如此,这并不能解决问题
我正在使用 mysql
使用默认驱动程序,我经历了用python3在macos上安装它的痛苦+
我等了5分钟才结束剧本。
我可以使用选择的sql db visualizer应用程序(例如sequel pro)以相同的规格即时查看数据,因此假设变量 my_engine_spec
是正确的。
为什么要花这么长时间甚至不解决?我怎样才能加快速度?
1条答案
按热度按时间5m1hhzi41#
我将chunksize限制为10,表中有10多条记录。
Pandas以块的形式读取整个表,每个块有10条或更少的记录。当您指定
chunksize
那个pandas.read_sql_table
将返回一个发电机。我等了5分钟才结束剧本。
read_sql_table
将读取整个表,所有记录。也就是说如果你想用read_sql_table
一个非常大的表,然后选择特殊的列,你会花费更多的时间和内存,相比之下,在mysql里面完成它。为什么要花费这么长的时间,这与您通过代码所做的工作有关,如果您只运行示例代码所显示的内容,那么它应该很快(我曾尝试读取0.5m条记录,但只需几秒钟)为什么要花这么长时间甚至不解决?
如果你不需要所有的记录,那么使用
read_sql
或者read_sql_query
运行查询。因为mysql做得很好。