基于Pandas DataFrame唯一值循环生成SQL建表语句
生成Pandas DataFrame对应的建表SQL语句
没问题,既然你已经拿到了唯一的库表组合,接下来只需要针对每个表过滤出对应的列信息,再拼接成SQL语句就可以啦。这里有两种简单的实现方式,你可以根据自己的习惯选择:
方法一:遍历唯一库表对
先把你已经得到的唯一(DB, Table)对拿出来,然后逐个过滤数据并拼接:
import pandas as pd # 你的原始DataFrame df = pd.DataFrame({ 'DB': ['Retail', 'Retail', 'Dept', 'Dept'], 'Table': ['Orders', 'Orders', 'Sales', 'Sales'], 'Column': ['ID', 'Place', 'ID', 'Name'], 'Format': ['INTEGER', 'STRING', 'INTEGER', 'STRING'] }) # 获取唯一的库表组合(你已经完成这一步啦) unique_tables = df[['DB', 'Table']].drop_duplicates().values.tolist() # 遍历每个库表对生成SQL for db, table in unique_tables: # 过滤当前表的所有列数据 table_columns = df[(df['DB'] == db) & (df['Table'] == table)] # 拼接"列名 数据类型"的字符串列表 column_defs = [f"{row['Column']} {row['Format']}" for _, row in table_columns.iterrows()] # 组装完整的建表语句 create_sql = f"create table {db}.{table} ( {', '.join(column_defs)} )" print(create_sql)
方法二:用groupby分组处理
这种方式更简洁,直接按DB和Table分组,每组就是对应表的所有列信息:
import pandas as pd # 你的原始DataFrame df = pd.DataFrame({ 'DB': ['Retail', 'Retail', 'Dept', 'Dept'], 'Table': ['Orders', 'Orders', 'Sales', 'Sales'], 'Column': ['ID', 'Place', 'ID', 'Name'], 'Format': ['INTEGER', 'STRING', 'INTEGER', 'STRING'] }) # 按DB和Table分组,生成每个表的建表语句 for (db, table), group in df.groupby(['DB', 'Table']): # 拼接列定义 column_defs = group.apply(lambda row: f"{row['Column']} {row['Format']}", axis=1).tolist() # 生成SQL create_sql = f"create table {db}.{table} ( {', '.join(column_defs)} )" print(create_sql)
两种方法运行后都会输出你想要的结果:
create table Retail.Orders ( ID INTEGER, Place STRING)
create table Dept.Sales ( ID INTEGER, Name STRING)
如果你的DataFrame里有更多表或者列,这两种方式都能轻松适配,而且代码可读性也不错~
内容的提问来源于stack exchange,提问作者orak
相关产品推荐
相关产品推荐

