如上所述,我需要使用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语法错误。您是否知道如何处理它或指出错误?
非常感谢
答案 0 :(得分:0)
您的my_query.sql
文件存在问题。
SELECT (SELECT * from tab1), (SELECT * from tab2)
以上是无效的SQL;子选择只能返回单个列。为此,您需要加入FROM
子句中的两个子选择。您执行此操作的列将完全取决于您的架构和所需的关系。
<强>更新强>
好的,所以这里的问题似乎更多地是关于你如何处理查询。您的游标对象连接到单个数据库。不是整个数据库服务器。
这意味着您的光标对象无法在此处使用use
关键字。您需要为要连接的每个数据库创建新的连接和游标对象。