You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:18:01