【问题标题】:Creating pandas list of data frames from MySQL tables in python在 python 中从 MySQL 表创建数据帧的 pandas 列表
【发布时间】:2020-07-18 23:21:12
【问题描述】:

我有 MySQL 服务器,我们可以称为 MySever,该服务器上有一百个数据库,我们可以将这些数据库称为:database1、database2、database3……database100。每个数据库都有一个名为 tablepull 的表。我想要做的是获取每个数据库中的每个名为“tablepull”的表并将该表存储到 python 列表中,表“tablepull”对于每个数据库都有完全相同的标题,并且可以保存为 pandas 中的数据框。

这里是定义的变量:

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)并保存到列表中。任何帮助或指导将不胜感激。

谢谢

【问题讨论】:

  • 您使用的是哪个DB-API? pyodbc,pymssql,其他?通常,它由引擎连接中的mssql 关键字表示,您在上面的编辑代码中没有。

标签: python sql pandas list sqlalchemy


【解决方案1】:

您可以连接到多个数据库,前提是它们在同一台服务器上,方法是在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)        

最后你会得到一个包含所有数据帧的dictionary。

这应该会有所帮助。

【讨论】:

  • 谢谢,我能够在不指定数据库名称的情况下进行连接。最后一行我收到语法错误:df{}.format(c) = pd.read_sql_query(query, engine, params=(db))
  • 编辑了我的答案。请检查。
  • 很好的答案,但您不能参数化标识符,如表名和列名。使用 f 字符串:pd.read_sql_query(f"SELECT * FROM {db}.Table", engine).
  • 谢谢你们,但现在我的连接不工作了,当我认为连接已经建立时,我一定是搞错了。我尝试的是:engine = create_engine(mssql:// UserName: Password@Server?driver=SQL Server Native Client 11.0')
  • @Parfait 感谢您指出这一点。更新了我的答案。你应该得到+1:P
猜你喜欢
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 2021-04-28
  • 2020-04-13
  • 2019-01-10
  • 2017-06-14
  • 1970-01-01
  • 2017-04-30
相关资源
最近更新 更多