表格文件导入postgresql

概述

从微信公众号中看到一篇文章,说将CSV文件内容导入到mysql中,而且还很通用。我觉得这个挺有意思,于是就自己编写了一个脚本,大家可以参考下。

讲解

其实脚本也是很简单,从表格文件中读取数据,然后将数据写到postgresql中。
首先是读取数据,使用的是pandas模块,自带读取Excel和CSV文件。
所以首先做的就是读取文件

def get_file_data(file):
    try:
        if file.endswith('.csv'):
            data = pd.read_csv(file,encoding='gbk')
        elif file.endswith('.xls') or file.endswith('.xlsx'):
            data = pd.read_excel(file)
        else:
            data = None
    except Exception as e:
        print('Read data from file [{0}] failed: [{1}]'.format(file, e))
        data = None
    return data

读取到文件就需要整理成sql,写到数据库中,其实难点就在这里。如何整理出sql语句
首先是整理出创建数据库中表的sql。表名可以从文件名获取filename = file.split('.')[0],表中的项目名可以从数据中获取column_head = data.columns.tolist()。接着是数据类型,需要做下转换。可以先下面的代码

def create_table(filename,headers,header_types):
    sql = 'CREATE TABLE IF NOT EXISTS table_{}('.format(filename)
    columns_list = []
    for header in headers:
        if header_types[header] == 'int':
            part = header + ' INT'
        elif header_types[header] == 'float':
            part = header + ' FLOAT'
        elif header_types[header] == 'datetime64':
            part = header + ' DATE'
        else:
            part = header + ' VARCHAR(300)'
        columns_list.append(part)
    columns = ','.join(columns_list)
    sql = sql + columns + ')'
    return sql

构建完后,连接数据库创建table。
之后是插入数据。这块比较简答,不在赘述了。
完整代码请参考:完整代码

推荐阅读更多精彩内容