python: 如何使用 pandas.read_sql_query 查询多个 mysql 数据库
python: how to query multiple mysql databases using pandas.read_sql_query
如上所述,我需要使用 pandas.read_sql_query
查询具有相同架构的多个数据库。我试图在所有 dbs 和 运行 上动态创建循环 sql 语句,这会导致类似这样的结果:
USE db_test_1; SELECT * from test
这就是我到目前为止所做的:
cursor = conn.cursor()
cursor.execute("SHOW DATABASES LIKE '%test_%'")
cursor.close()
dbs = [v.replace("'", "") for (v, ) in cursor]
for db in dbs[:100]:
temp = "USE " + db + ";"
fd = open('my_query.sql')
query = fd.read()
fd.close
sql = temp + query
data = pd.read_sql_query(sql, conn)
print(data)
报错说 mysql 语法错误。你知道如何处理它或指出错误吗?
非常感谢
您的问题出在您的 my_query.sql
文件上。
SELECT (SELECT * from tab1), (SELECT * from tab2)
以上内容无效SQL;子选择只能 return 单列。为此,您需要在 FROM
子句中加入两个子选择。您在哪些列上执行此操作将完全取决于您的模式和所需的关系。
更新:
好的,所以这里的问题似乎更多地与您如何处理查询有关。您的游标对象连接到单个数据库。不是整个数据库服务器。
也就是说你的游标对象不能在这里使用use
关键字。您需要为每个要连接的数据库创建一个新的连接和游标对象。
如上所述,我需要使用 pandas.read_sql_query
查询具有相同架构的多个数据库。我试图在所有 dbs 和 运行 上动态创建循环 sql 语句,这会导致类似这样的结果:
USE db_test_1; SELECT * from test
这就是我到目前为止所做的:
cursor = conn.cursor()
cursor.execute("SHOW DATABASES LIKE '%test_%'")
cursor.close()
dbs = [v.replace("'", "") for (v, ) in cursor]
for db in dbs[:100]:
temp = "USE " + db + ";"
fd = open('my_query.sql')
query = fd.read()
fd.close
sql = temp + query
data = pd.read_sql_query(sql, conn)
print(data)
报错说 mysql 语法错误。你知道如何处理它或指出错误吗?
非常感谢
您的问题出在您的 my_query.sql
文件上。
SELECT (SELECT * from tab1), (SELECT * from tab2)
以上内容无效SQL;子选择只能 return 单列。为此,您需要在 FROM
子句中加入两个子选择。您在哪些列上执行此操作将完全取决于您的模式和所需的关系。
更新:
好的,所以这里的问题似乎更多地与您如何处理查询有关。您的游标对象连接到单个数据库。不是整个数据库服务器。
也就是说你的游标对象不能在这里使用use
关键字。您需要为每个要连接的数据库创建一个新的连接和游标对象。