当我运行以下代码时,需要很长时间。另一方面,如果我在Bash中使用命令行mysql客户端实现相同的功能,它的速度提高了9倍。
我的代码有问题吗?有没有人有同样的问题? SQL结果集不是那么大。
import MySQLdb
servers = (
{'host': 'host1',
'schema': ('schema1', 'schema2')},
{'host': 'host2',
'schema': ('schema1', 'schema2')}
...
)
sql = """
...
"""
for node in servers:
for schema in node['schema']:
conn = MySQLdb.connect(host=node['host']), user='user', passwd='passwd')
conn.select_db(schema)
cursor = conn.cursor()
cursor.execute(sql, (param1, param2, param3))
for row in cursor.fetchall():
print row[0], ....
cursor.close()
conn.close()
我也发现,如果SQL查询由于JOIN而具有表别名,我无法动态更改JOIN条件,例如。
SELECT t1.f1, t2.f2
FROM table t1 JOIN table t2 ON t1.id = t2.id AND t1.name = t2.name
WHERE t1.id = 10
如果我需要更改其他内容的t2.name,例如t2.text MySQLdb不允许我这样做:
sql = """
SELECT t1.f1, t2.f2
FROM table t1 JOIN table t2 ON t1.id = t2.id AND t1.name = t2.%s
WHERE t1.id = %s
"""
cursor.execute(sql, (param1, param2))
有没有办法改变这个:t1.name = t2。%s?