【发布时间】:2020-03-05 19:42:03
【问题描述】:
我有一种情况,我试图从 SQL 导入一个表,将它与来自 pandas 的另一个数据帧连接,然后将连接的数据帧返回给 SQL。但是,我多次重复执行相同的过程。
例如,如果我有一些数据框,例如
df1 = some data
df2 = other data
df3 = more data
etc.
对于 df1,然后我将使用 PyODBC 创建对 SQL 的查询并将表保存为数据框。
sql_conn = pyodbc.connect(connection_to_database)
query = 'SELECT * FROM [Database].[Schema].[Table1]'
sql_data = pd.read_sql(query, sql_conn)
此时我会使用sql_data,做我需要的事情,然后将它与df1 连接起来,然后使用sqlalchemy 将其返回给SQL
data = pd.concat([sql_data, df1)
data.to_sql('Table1', if_exists='replace')
所有这些都可以正常工作,但是当我必须以更优雅的方式复制此过程时,我的问题就来了。我可以通过执行类似的操作来简单地对其进行硬编码
query = 'SELECT * FROM [Database].[Schema].[Table2]'
sql_data = pd.read_sql(query, sql_conn)
data = pd.concat([sql_data, df2)
data.to_sql('Table2', if_exists='replace')
query = 'SELECT * FROM [Database].[Schema].[Table3]'
sql_data = pd.read_sql(query, sql_conn)
data = pd.concat([sql_data, df3)
data.to_sql('Table3', if_exists='replace')
etc..
但是,这显然不是理想的解决方案。如果我要将它放入循环/函数中,我最关心的是如何为每个表设置适当的表名并正确地遍历每个数据帧,以便它与 SQL 中的正确表匹配。
【问题讨论】:
标签: python sql-server pandas dataframe