心猿益码

忙碌是一种幸福,让我们没时间体会痛苦; 奔波是一种快乐,让我们真实地感受生活; 疲惫是一种享受,让我们无暇空虚。
python实现excel模板生成建表sql
#! /usr/bin/python
# -*- coding: utf-8 -*-
import xlrd3
import os
import codecs


# 在postgresql中create table
def postgres_create(fields):
    stg_table_name = 'traffic.' + fields[0]['table_name']
    columns = []
    for field in fields:
        table_column = '  ' + field['column_name'] + ' ' + field[
            'type'] + ' ' + 'comment' + ' ' + "'" + field[
                'comment'] + "'" + ',\n'
        # print(table_column)
        columns.append(table_column)
    # print(columns)
    stg_create_columns = ''.join(columns)[:-2]
    # print(stg_create_columns)

    create_stg_sql = "DROP TABLE IF EXISTS %s ;\n" % (stg_table_name)

    create_stg_sql = create_stg_sql + "create table if not exists %s (\n%s\n) row format delimited fields terminated by '%s' lines terminated by '%s'\n stored as parquet;\n" % (
        stg_table_name, stg_create_columns, '&', '\\n')
    print(create_stg_sql)

    # header = "File Header"
    fd = codecs.open('./test.sql', 'a', 'utf-8')
    # print(header, file=fd)
    print(create_stg_sql, end='', file=fd)
    fd.close()


paths = [r'E:/project/excel/']
for path in paths:
    for filename in os.listdir(path):
        if filename.endswith(".xlsx"):
            worksheet = xlrd3.open_workbook(path + filename)
            table_name = worksheet.sheet_names()
            # get sheet page
            for n in range(len(table_name)):
                sheet = worksheet.sheet_by_index(n)
                nrows = sheet.nrows
                fields = []
                # get rows
                for i in range(nrows):
                    # remove 3 ,from 4 start
                    if i > 3:
                        res = sheet.row_values(i)
                        desc = {
                            'column_name': res[0].lower(),
                            'table_name': table_name[n].lower(),
                            'type': 'string',
                            'comment': res[2],
                        }
                        fields.append(desc)
                if len(fields) > 0:
                    postgres_create(fields)

其中,xlrd3包需要在python中安装

posted on 2021-11-11 16:07  心猿益码  阅读(292)  评论(0编辑  收藏  举报