pyhon通过读取excel的表结构数据,形成建表语句

excel中需要包含:第一列为字段名称,第二列为字段类型,第三列为字段长度,第四列为是否为主键利用Y/N区分

import xlrd
import os

def convert_type(data_type):
    """Normalize MySQL `data_type`"""
    if 'CHAR' == data_type:
        return 'varchar'
    elif 'CLNT' == data_type:
        return 'varchar'
    elif 'NUMC' == data_type:
        return 'numeric'
    elif 'DATS' == data_type:
        return 'timestamp'
    elif 'QUAN' == data_type:
        return 'varchar'
    elif 'CUKY' == data_type:
        return 'varchar'
    elif 'CURR' == data_type:
        return 'varchar'
    elif 'DEC' == data_type:
        return 'varchar'
    elif 'INT4' == data_type:
        return 'varchar'
    elif 'TIMS' == data_type:
        return 'varchar'


    else:
        return data_type

# 在postgresql中创建表
def postgres_create(fields):
    stg_table_name = 'dw_stg.stg_cus_dim_' + fields[0]['table_name']
    edw_table_name = 'dw_edw.edw_cus_dim_' + fields[0]['table_name']
    columns = []
    primary_key = []
    for field in fields:
        if field['primary_key'] == 'Y':
            primary_key.append(field['column_name'])
        if field['length'] == '' or field['length'] == None:
            table_column = field['column_name'] + ' ' + field['type'] + ',\n'
        else:
            table_column = field['column_name'] + ' ' + field['type'] + '(' + str(field['length']) + ')' +  ',\n'
        #print(table_column)
        columns.append(table_column)
    #print(columns)
    stg_create_columns = ''.join(
        columns) + 'modify_date_etl timestamp default now(),\nload_dt timestamp default now(),\n'
    edw_create_columns = ''.join(columns) + 'load_dt timestamp default now(),\n'
    create_primary_key = ','.join(primary_key)
    create_stg_sql = "create table %s (\n%sprimary key(%s)\n)\ndistributed by (%s);" % (
    stg_table_name, stg_create_columns, create_primary_key, create_primary_key)
    create_edw_sql = "create table %s (\n%sprimary key(%s)\n)\ndistributed by (%s);" % (
    edw_table_name, edw_create_columns, create_primary_key, create_primary_key)
    print(create_stg_sql)
    print(create_edw_sql)


paths = [r'C:/Users/zhudong/Desktop/sap-table/']
for path in paths:
    for filename in os.listdir(path):
        if filename.endswith(".xlsx"):
            worksheet = xlrd.open_workbook(path + filename)
            table_name = worksheet.sheet_names()
            for n in range(len(table_name)):
                sheet = worksheet.sheet_by_index(n)
                nrows = sheet.nrows
                fields = []
                for i in range(nrows):
                    res = sheet.row_values(i)
                    desc = {
                        'column_name': res[0].lower(),
                        'table_name': table_name[n].lower(),
                        'type': convert_type(res[1]),
                        'length': res[2],
                        'primary_key': res[3],
                    }
                    fields.append(desc)
                #print(fields)
                postgres_create(fields)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python可以使用第三方库openpyxl来读取Excel文件,并根据其中的内容生成建表语句。具体的步骤如下: 1. 首先安装openpyxl库,可以使用pip install openpyxl来进行安装。 2. 使用openpyxl中的load_workbook函数加载Excel文件。例如,可以使用以下代码加载名为"example.xlsx"的Excel文件: ```python from openpyxl import load_workbook wb = load_workbook(filename="example.xlsx") ``` 3. 获取Excel中的工作。通过wb.sheetnames可以获取到所有的工作名字,然后使用wb[sheetname]来选择想要操作的工作。例如,可以使用以下代码获取名为"Sheet1"的工作: ```python sheet = wb["Sheet1"] ``` 4. 遍历工作中的单元格,获取每个单元格的值。利用sheet的.iter_rows()或.iter_cols()方法可以逐行或逐列遍历单元格,并使用.value属性获取单元格的值。例如,可以使用以下代码遍历工作中的所有单元格: ```python for row in sheet.iter_rows(): for cell in row: value = cell.value # 根据单元格的值进行相应的处理 ... ``` 5. 根据单元格的值生成建表语句。根据Excel中的内容,可以自定义规则来生成建表语句。例如,可以使用字符串拼接的方式生成CREATE TABLE语句,然后将其写入到文件中。具体的规则根据具体需求而定。 6. 最后保存并关闭Excel文件。使用wb.save()方法保存并覆盖Excel文件,然后使用wb.close()方法关闭文件。例如,可以使用以下代码保存并关闭Excel文件: ```python wb.save(filename="example.xlsx") wb.close() ``` 通过以上步骤,可以使用Python读取Excel文件中的内容,并根据需要生成相应的建表语句
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值