博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mdb格式数据文件导入postgresQL数据库
阅读量:6171 次
发布时间:2019-06-21

本文共 4860 字,大约阅读时间需要 16 分钟。

hot3.png

       

 导入脚本说明(此脚本运行于linux):

1.apt-get install mdbtools,安装mdbtools工具

2.将mdb 文件拷贝到linux虚拟机中,修改脚本中mdb文件目录‘dir’

3.修改服务器及数据库配置

4.执行脚本

# -*- encoding: utf-8 -*-import osimport reimport psycopg2import csv#mdb文件目录dir = r'/home/kotaimen/mdb_file/'mdb_tbl_dic = {}def make_create_sql():    if os.path.isfile(dir + 'create.sql'):        os.remove(dir + 'create.sql')    for mdb_file in os.walk(dir):        if len(mdb_file[2]) > 0:            for file_p in mdb_file[2]:                if file_p[-3:] == 'mdb':                    print file_p                    cmd = 'mdb-schema %s  >> /home/kotaimen/mdb_file/create.sql'                    cmd = cmd % (dir + file_p)                    print cmd                    os.system(cmd)                    cmd = 'mdb-tables -1 %s ' % (dir + file_p)                    val = os.popen(cmd).read()                    mdb_tbl_dic[file_p] = val.split('\n')    print mdb_tbl_dicdef modefy_create_sql():    sql_file_name = dir + 'create.sql'    sql_file_name_des = sql_file_name + '_new'    fobj = open(sql_file_name, 'r')    fobj_des = open(sql_file_name_des, 'w')    for eachline in fobj:        #判断表名中是否含有空格        if eachline.find('TABLE ') >= 0:            if eachline.find(';') >= 0:                start_loc = eachline.find('TABLE ') + 6                end_loc = eachline.find(';')                tbl_name = eachline[start_loc:end_loc]                eachline = eachline.replace(tbl_name, '"' + tbl_name + '"')            else:                start_loc = eachline.find('TABLE ') + 6                end_loc = eachline.find('\n')                tbl_name = eachline[start_loc:end_loc]                eachline = eachline.replace(tbl_name, '"' + tbl_name + '"')        if eachline.find('DROP TABLE') >= 0 :            eachline = eachline.replace('DROP TABLE', 'DROP TABLE IF EXISTS')        if eachline.find('Table') >= 0 :            eachline = eachline.replace('Table', '"Table"')        #create 语句,最后一行没有逗号        if eachline.find('Text ') >= 0 and eachline.find(',') > 0:            loc = eachline.find('Text ')            eachline = eachline[0:loc] + ' Text,\n'        elif eachline.find('Text ') >= 0 and eachline.find(',') < 0:            loc = eachline.find('Text ')            eachline = eachline[0:loc] + ' Text \n'        fobj_des.writelines(eachline)    fobj.close()    fobj_des.close()    os.remove(sql_file_name)    os.rename(sql_file_name_des, sql_file_name)def make_insert_csv():    for file_p in mdb_tbl_dic.keys():        for tbl in mdb_tbl_dic[file_p]:            if len(tbl) > 0:                cmd = 'mdb-export    %s %s > %s.csv' % (dir + file_p, '"' + tbl + '"', dir + '"' + tbl + '"')# tbl.replace(' ', '_').replace('&', '_'))                os.system(cmd)def modefy_insert_CSV():    for sql_file in os.walk(dir):        if len(sql_file[2]) > 0:            for file_p in sql_file[2]:                if file_p[-3:] == 'csv' :                    sql_file_name = dir + file_p                    sql_file_name_des = sql_file_name + '_new'                    fobj = open(sql_file_name, 'r')                    fobj_des = open(sql_file_name_des, 'w')                    for (num, val) in enumerate(fobj):                        eachline = val                        if num == 0:                            col_list = eachline.split(',')                            stat = 'COPY ' + '"' + (file_p[0:-4]) + '"' + ' (' #+ ('%s,'*len(line))[:-1]+')'                            for col in col_list:                                if col == 'Table':                                    col = '"' + 'Table' + '"'                                if col.find('\n') >= 0:                                    col.replace('\n', '')                                stat = stat + col + ','                            stat = stat[:-2] + ')' + ' FROM STDIN WITH CSV ;\n'                            eachline = stat                        fobj_des.writelines(eachline)                    fobj.close()                    fobj_des.close()                    os.remove(sql_file_name)                    os.rename(sql_file_name_des, sql_file_name)def insert_into_database():    cmd = 'psql -h 172.26.11.205 -d ap_MapMyIndia_full_Sample -U postgres -f %s 2>>log.txt' % (dir + 'create.sql')    os.system(cmd)    for sql_file in os.walk(dir):        if len(sql_file[2]) > 0:            for file_p in sql_file[2]:                print file_p                if file_p[-3:] == 'csv' :                    cmd = 'psql -h 172.26.11.205 -d ap_MapMyIndia_full_Sample -U postgres -f %s 2>>log.txt' % (dir + '"' + file_p + '"')                    os.system(cmd)if __name__ == "__main__":    #1.制作mdb文件中所包含TABLE的create脚本    make_create_sql()    #2.修改掉create脚本中的不合法字符    modefy_create_sql()    #3.将mdb中各表导出到csv文件中    make_insert_csv()    #4.修改csv脚本首行,改成copy形式    modefy_insert_CSV()    insert_into_database()

转载于:https://my.oschina.net/weiwubunengxiao/blog/188056

你可能感兴趣的文章
JavaScript 复习之 对象的继承
查看>>
从开源小白到 Apache Member,我的成长之路
查看>>
logstash简介
查看>>
Java多线程之synchronized理论
查看>>
Android NestedScrolling解决滑动冲突问题(2) - fling问题与NestedScroll++
查看>>
Tomcat和JVM的性能调优总结
查看>>
硬件线程和软件线程的区别
查看>>
时间戳前
查看>>
11月22日晚上海交大《PMI敏捷实践指南解读》线上沙龙欢迎你的参与!
查看>>
初识 Linux (VMware、CentOS 7)
查看>>
使用SpringMVC完成文件上传
查看>>
mysql Load Data InFile 的用法
查看>>
Go new vs make
查看>>
【云宏大讲坛】超融合,融合的不仅是基础架构
查看>>
pytnon入门的一些小实例
查看>>
ubuntu下的dock工具
查看>>
饿了么被上海市市场监督局予以警告处分
查看>>
Java项目读取配置文件时,找不到指定的文件???
查看>>
lua/luajit and tcc
查看>>
前端安全即JS代码安全,前端源码安全探讨!
查看>>