read\u sql\u表从不解析

6kkfgxo0  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(411)

我正在试验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 是正确的。
为什么要花这么长时间甚至不解决?我怎样才能加快速度?

5m1hhzi4

5m1hhzi41#

我将chunksize限制为10,表中有10多条记录。
Pandas以块的形式读取整个表,每个块有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里面完成它。为什么要花费这么长的时间,这与您通过代码所做的工作有关,如果您只运行示例代码所显示的内容,那么它应该很快(我曾尝试读取0.5m条记录,但只需几秒钟)
为什么要花这么长时间甚至不解决?
如果你不需要所有的记录,那么使用 read_sql 或者 read_sql_query 运行查询。因为mysql做得很好。

相关问题