gpt4 book ai didi

Python MySQL 查询在 MySQL Workbench 工作正常的地方超时

转载 作者:可可西里 更新时间:2023-11-01 07:07:50 26 4
gpt4 key购买 nike

我最近将我的网站转移到了新服务器上。我有一些基本的 python 脚本,可以访问 MySQL 数据库中的数据。在旧服务器上,我们没有遇到任何问题。在新服务器上:

  • MySQLWorkbench 可以轻松连接并执行所有查询
  • 相同的 (SELECT) 查询与 python 工作 5% 的时间和其他 95% 的时间它们超时或查询期间连接丢失
  • 例如,该表有 100000 行,在 MySQLWorkbench 中选择整个内容就可以了。 3秒后返回。
  • 在 python 中,相同的查询永远不会工作,当 LIMIT 2999 查询工作但只是 LIMIT 3010 导致它超时。
  • 在本地或远程运行脚本时观察到相同的效果

现在已经研究了几天,想弄清楚数据库、数据库服务器、服务器本身是否有一些设置阻止 python(但不是 MySQLWorkbench)正确地完成它的工作。

查询和代码,以防它们很有趣:

query = "SELECT * FROM wordpress.table;"

conn = MySQLConnection(**mysqlconfig)
cursor = conn.cursor()
cursor.execute(query)
rows = cursor.fetchall()

我没有服务器的详细信息,但它有足够的能力让 MySQLWorkbench 正常工作,只是 python 似乎无法工作

**** 编辑 ****

为了查看此问题是否是由于查询返回太多数据以供 python 处理而引起的,我想到了使用 OFFSET 和 LIMIT 循环遍历一个更大的查询,例如每个查询 10 行。

total_rows = 100000
interval = 10
data = []

for n in range(0, total_rows / interval):
q = "SELECT * FROM wordpress.table LIMIT %s OFFSET %s" % (interval, n * interval)
cursor.execute(q)
returned = cursor.fetchall()
rows = [[i for i in j] for j in list(returned)]

for row in rows:
data.append(row)

print n, len(data)

预期:这将在较小的部分中快速完成较大的查询发生:它比之前卡住的 3000 行走得更远,但在一些迭代后最终碰壁了。也不一致,运行脚本 10 次导致 n 每次都到达不同的点。

最佳答案

使用服务器端游标可能会获得更好的性能:

import MySQLdb.cursors

con = MySQLdb.connect(host=host,
user=user,
passwd=pwd,
charset=charset,
port=port,
cursorclass=MySQLdb.cursors.SSDictCursor);
cur = con.cursor()
cur.execute("SELECT * FROM wordpress.table")
for row in cur:
print row

您还可以查看对这些问题的回复:

How to get a row-by-row MySQL ResultSet in python

How to efficiently use MySQLDB SScursor?

关于Python MySQL 查询在 MySQL Workbench 工作正常的地方超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38948144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com