Cha*_*ith 5 python mysql mysql-workbench mysql-connector-python
我最近将网站移到了新服务器。我在MySQL数据库中有一些具有访问数据的基本python脚本。在旧服务器上,我们没有问题。在新服务器上:
已经研究了几天,以找出数据库,数据库服务器,服务器本身中是否存在阻止python(但不是MySQLWorkbench)正确执行其工作的服务器中的某些设置。
查询和代码,以防它们有趣:
query = "SELECT * FROM wordpress.table;"
conn = MySQLConnection(**mysqlconfig)
cursor = conn.cursor()
cursor.execute(query)
rows = cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)
我在服务器上没有详细信息,但它具有足够的功能使MySQLWorkbench正常工作,只是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)
Run Code Online (Sandbox Code Playgroud)
预期:这将迅速解决较小的较大查询发生:它比之前固定的3000行要远,但经过一些迭代后最终碰到了墙。同样不一致的是,运行脚本10次会导致n每次到达一个不同的点。
小智 2
使用服务器端游标您可能会获得更好的性能:
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
Run Code Online (Sandbox Code Playgroud)
您还可以检查对这些问题的答复: