我有下面的代码,我试图读取一个非常大的表,在MariaDB上有超过1亿行。理论上,execute只会设置游标,然后每当我迭代一行,它会获取它,或者至少这是它在文档上说的。
import pyodbc
cnxn = pyodbc.connect('DRIVER=/usr/lib/libmaodbc.so;socket=/var/run/mysqld/mysqld.sock;Database=101m;User=root;Password=123;Option=3;')
cursor = cnxn.cursor()
cursor.execute("select * from vat")
for row in cursor:
print(row)
我尝试了以下版本的代码,但没有结果。
x一个一个一个一个x一个一个二个x
更新:即使没有for循环,执行本身也需要很长时间。我尝试做的是从MariaDb服务器复制数据到一个sqlite数据库。
1条答案
按热度按时间5lwkijsr1#
根据ODBC,DSN服务器和客户端运行在同一台机器上。
在你的评论中,你提到你想通过一次选择移动100GB。这将需要大量的内存
另外,服务器端的大量GB将用于准备和发送结果(注意,服务器运行在同一台机器上)。这将导致内存问题(交换)并降低机器速度。
我建议分部分获取数据,并使用mariadb、pymysql或mysqldb模块代替。
示例(无任何异常处理):
另一个解决方案是使用服务器端游标,但是这个解决方案只被mariadb模块支持: