在python中从MySQL表创建数据帧列表

在python中从MySQL表创建数据帧列表,python,sql,pandas,list,sqlalchemy,Python,Sql,Pandas,List,Sqlalchemy,我有一个MySQL服务器,我们可以称之为MySQL。如果服务器上有100个数据库,我们可以称之为数据库:database1,database2,database3…database100。每个数据库都有一个名为tablepull的表。我试图做的是在每个数据库中获取每个名为“tablepull”的表,并将该表存储到python列表中,表“tablepull”对于每个数据库都有完全相同的头,并且可以保存为pandas中的dataframe 以下是定义的变量: from sqlalchemy impo

我有一个MySQL服务器,我们可以称之为MySQL。如果服务器上有100个数据库,我们可以称之为数据库:database1,database2,database3…database100。每个数据库都有一个名为tablepull的表。我试图做的是在每个数据库中获取每个名为“tablepull”的表,并将该表存储到python列表中,表“tablepull”对于每个数据库都有完全相同的头,并且可以保存为pandas中的dataframe

以下是定义的变量:

from sqlalchemy import create_engine
import pandas as pd

UserName = MyUserName
Password = MyPassword
Server = MyServer
Databases = [‘database1’, ‘database2’, ‘database3’,… ‘database100’]
Table = tablepull
我可以使用以下语法轻松地拉入一个数据库表:

engine = create_engine(mssql:// UserName: Password@Server/Table?driver=SQL Server Native Client 11.0')
connection = engine.connect()
cnxn = connection.connection
#Read in data into from sql table#
raw_data = pd.read_sql(sql = """SELECT * FROM Table""", con = cnxn)
目标是能够遍历所有数据库,为每个数据库获取所需的表(tablepull),并保存到列表中。任何帮助或指导都将不胜感激


谢谢

您可以连接到多个数据库,只要它们位于同一服务器上,就可以在
connect
命令中不指定数据库名称

现在,您可以拥有一个包含所有数据库名称的列表:

db_list = ['db1', 'db2', ... 'db100']
df_dict = {}

for c, db in enumerate(db_list):
    sql = """SELECT * FROM {}.Table"""
    df_dict[c] = pd.read_sql_query(sql.format(db), engine)        
最后,您将得到一个包含所有数据帧的
字典


这应该会有帮助。

谢谢,我可以在不指定数据库名称的情况下进行连接。我在你的最后一行得到一个语法错误:df{}.format(c)=pd.read_sql_query(query,engine,params=(db))编辑了我的答案。请检查。答案很好,但不能参数化标识符,如表名和列名。使用f-strings:
pd.read\u sql\u query(f“SELECT*FROM{db}.Table”,engine)
。谢谢你们两位,但现在我的连接不起作用了,我一定是搞错了,当时我以为连接成功了。我尝试的是:engine=create_engine(mssql://UserName:Password@Server?driver=SQL Server Native Client 11.0')@Parfait感谢您指出这一点。更新了我的答案。你应该得到一个+1:你用的是哪一个
pyodbc
pymssql
,其他?通常,它由发动机连接中的
mssql
关键字表示,您在上述修订代码中没有该关键字。