美文网首页
收藏!用Python一键批量将任意结构的CSV文件导入SQLit

收藏!用Python一键批量将任意结构的CSV文件导入SQLit

作者: 智能演示 | 来源:发表于2020-02-05 22:22 被阅读0次

    上周,推送了一篇:“ 收藏!用Python一键批量将任意结构的CSV文件导入MySQL数据库。” 本文是上篇的姊妹篇,只不过是把数据库换成了 Python 自带的SQLite3。

    使用 SQLite3 的优势还是很明显的,它是一种嵌入式数据库,只是一个.db格式的文件,无需安装、配置和启动,移植性非常好。是轻量级数据的不二之选!推荐看一下我写的入门文章: “ 收藏!Python内置的轻量级数据库竟如此好用!全网最实用sqlite3实战项目。”

    上一篇介绍的是一键批量导入 MySQL 数据库,这一篇介绍的是一键批量导入 SQLite3 数据库,两者代码 90% 相同。所以本文重点介绍不同之处。

    先看一下程序运行效果:

    程序运行动图演示.gif

    两篇文章使用的数据源是一模一样的。经本人亲测,导入到 SQLite3 的速度要比导入到 Mysql 快的多。这也进一步验证了,处理轻量级数据,SQLite 要便捷、快速的多。

    下面我们就来看看两者代码的主要不同吧:

    1. 数据库连接方式不同

    try:
        conn = conn = sqlite3.connect(path+'\csv.db')
        cur = conn.cursor()
        print('数据库连接成功!')
        print(' ')
    except:
        print('数据库连接失败!')
    

    SQLite3 数据库的连接方式更简单,直接指明路径即可。

    2. 代码优化,提高通用性

    2.1 优化了数据库表名称

    for file in files:
        if file.split('.')[-1] in ['csv']: 
            i += 1
            filename = '`' + 'tab_' + file.split('.')[0].replace('-', '_').replace(' ', '_').replace(':','') + '`'
    

    通过遍历每一个 CSV 文件的名称,计算出一个数据库表名称,确保计算出的表名称符合数据库规则:

    filename = '`' + 'tab_' + file.split('.')[0].replace('-', '_').replace(' ', '_').replace(':','') + '`'

    首先,在数据库表名称前加上 tab_ ,避免纯数字作为表名称时程序报错;其次,替换了 -:空格;最后,在数据库表名称前后加上一对反引号。

    2.2 优化了数据库表字段名称

    types = f.ftypes
            field = [] #用来接收字段名称的列表
            table = [] #用来接收字段名称和字段类型的列表 
            for item in columns:
                item1 = '`'+item.replace('-', '_').replace(' ', '_').replace(':','')+'`'
                if 'int' in types[item]:
                    char = item1 + ' INT'
                elif 'float' in types[item]:
                    char = item1 +' FLOAT'
                elif 'object' in types[item]:
                    char = item1 +' VARCHAR(255)'
                elif 'datetime' in types[item]:
                    char = item1 + ' DATETIME'
                else:
                    char = item1 + ' VARCHAR(255)'
                table.append(char)
                field.append(item)
    
            tables = ','.join(table) 
            #print(tables)
            fields = ','.join(field)
            #print(fields)
    

    和数据库表名称优化一样,替换了 -:空格等特殊符号,并在每一个字段名称前后加上一对反引号。

    3. SQL 语句不同

    3.1 创建自增主键语句不同

    创建 MySQL 数据库自增主键的语句是:id0 int PRIMARY KEY NOT NULL auto_increment;创建 SQLite 数据库自增主键的语句是:id0 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL

    两者略有不同,SQLite 是用 AUTOINCREMENT 创建自增主键。

    3.2 插入数据的语句不同

    values = f.values.tolist() 
    s = ','.join(['?' for _ in range(len(f.columns))]) 
    insert_sql = 'insert into {}({}) values({})'.format(filename,fields,s)
    cur.executemany(insert_sql, values) 
    conn.commit()
    

    主要区别是:SQLite 使用 ? 来占位。

    以上就是一键批量将任意结构的CSV文件导入SQLite数据库与MySQL数据库代码的主要不同点。如果您还没有看过上一篇文章,强烈建议去看一下!上篇文章代码实现思路方面讲解的更详细:“ 收藏!用Python一键批量将任意结构的CSV文件导入MySQL数据库。”

    下面给大家介绍一款 SQLite 数据可视化工具:

    SQLiteStudio 是一款绿色小巧的 SQLite 数据库可视化工具,功能强大,操作简单。

    我们可以将上文自动导入生成的数据库 csv.db 添加到 SQLiteStudio 中,可以很方便的查看到数据库中有哪些表,以及表结构和数据。见下图:

    添加数据库动图演示.gif

    我们也可以打开一个 SQL编辑器,输入 SQL 命令,执行你想要的操作。见下图:

    查询动图演示.gif

    SQLiteStudio 还有很多好用的功能,本文不再介绍,感兴趣的朋友可以研究一下。

    本文完,谢谢阅读!

    本文 源代码数据源SQLiteStudio 软件以上传,智能演示微信公众号后台回复 csv2sqlit 即可获取下载链接。

    不知道大家对SQLite数据库是否感兴趣呢,欢迎在下方留言。


    猜你喜欢:

    1. 一文学懂Python数据结构之字符串基础知识

    2. 这是format函数的骚操作???

    3. 用Markdown,3分钟搞定微信公众号文章排版!

    4. PPT居然还可以一键换色!学会这4招再也不怕色了……

    5. 7步完成MySQL配置,极简教程,还不来试试?

    6. 4 行代码实现批量、快速安装 Python 第三方库

    7. 让程序帮你干活!批量转换任意文件夹下Word文档为PDF

    8. 我用 Python 处理3万多条数据,只要几秒钟……

    9. 让你的程序学会自己戴'口罩'!让你的程序更聪明?

    10. 收藏!用Python一键批量将任意结构的CSV文件导入MySQL数据库。


    相关文章

      网友评论

          本文标题:收藏!用Python一键批量将任意结构的CSV文件导入SQLit

          本文链接:https://www.haomeiwen.com/subject/vmlkxhtx.html