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

575adbdb81fba56a31178a4cb635c7bf.gif

     作者:牛思勉

     来源:智能演示

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

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

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

先看一下程序运行效果:

18d3de0e168e3623570035b5a9a412ea.gif
程序运行动图演示.gif

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

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

1. 数据库连接方式不同

try:

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

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

2.1 优化了数据库表名称

for file 

通过遍历每一个 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 中,可以很方便的查看到数据库中有哪些表,以及表结构和数据。见下图:

092e081b19ae80fba57fddc487af924e.gif
添加数据库动图演示.gif

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

733d8da5da73b40477044343790c30b0.gif
查询动图演示.gif

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

本文完,谢谢阅读!

本文 源代码

◆ ◆ ◆  ◆ ◆

2a1ffee27c29e318d7c52c76ef15b3af.png

长按二维码关注我们

数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:

167b81a0a1cf9eb469ec147f3372435c.png

猜你喜欢

● 笑死人不偿命的知乎沙雕问题排行榜

● 用Python扒出B站那些“惊为天人”的阿婆主!

● 互联网大佬学历&背景大揭秘,看看是你的老乡还是校友

● 上万条数据撕开微博热搜的真相!

● 你相信逛B站也能学编程吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Python的pandas库来读取csv文件,并将数据插入到已经创建好的数据库中。具体步骤如下: 1. 使用pandas库的read_csv函数读取csv文件,将数据读取到一个DataFrame对象中。 2. 使用pandas库的to_sql函数将DataFrame对象中的数据插入到数据库中。需要指定数据库连接信息、名和插入方式等参数。 注意,如果csv文件中的列名与数据库中的列名不一致,需要使用pandas库的rename函数将列名进行重命名,以便与数据库中的列名对应。 示例代码如下: ```python import pandas as pd import sqlalchemy # 数据库连接信息 db_url = 'mysql+pymysql://username:password@host:port/database' # 读取csv文件 df = pd.read_csv('data.csv') # 将列名重命名为数据库中的列名 df = df.rename(columns={'csv_column1': 'table_column1', 'csv_column2': 'table_column2'}) # 建立数据库连接 engine = sqlalchemy.create_engine(db_url) # 将数据插入到数据库中 df.to_sql(name='table_name', con=engine, if_exists='append', index=False) ``` 注意,以上代码仅供参考,具体实现需要根据实际情况进行调整。 ### 回答2: 使用Python导入CSV文件到已经创建好的数据库,需要使用数据库连接库和CSV读取库。 首先,需要创建数据库连接,并且使用合适的库进行连接。 ```python import csv import sqlite3 # 创建数据库连接 conn = sqlite3.connect('database.db') c = conn.cursor() ``` 接着,打开CSV文件并且读取其中的数据。 ```python with open('data.csv', 'r') as csvfile: csvreader = csv.reader(csvfile) # 获取头 headers = next(csvreader) # 遍历每一行数据 for row in csvreader: # 将数据插入到数据库中 c.execute("INSERT INTO table_name VALUES (?,?,?,?,?)", row) ``` 最后,提交更改并且关闭数据库连接。 ```python # 提交更改 conn.commit() # 关闭数据库连接 conn.close() ``` 上述代码假设已经存在一个名为`database.db`的数据库,并且其中已经创建好了一个名为`table_name`的。为了使代码更贴切实际情况,你需要根据实际的数据库结构进行适当的更改。 ### 回答3: 可以使用Python中的pandas库来实现将csv文件导入已经创建好的数据库,并且不改变结构头。 首先,需要安装pandas库: ```python pip install pandas ``` 然后,导入pandas库并读取csv文件,将其转换为DataFrame对象: ```python import pandas as pd # 读取csv文件,并将其转换为DataFrame对象 df = pd.read_csv('data.csv') ``` 接下来,使用Python中的第三方数据库连接库(如pymysql、psycopg2等)连接到数据库,并创建一个数据库连接对象: ```python import pymysql # 连接数据库 conn = pymysql.connect(host='数据库地址', port=3306, user='用户名', passwd='密码', db='数据库名') ``` 然后,使用to_sql()方法将DataFrame对象插入到已创建好的数据库中,并指定名和连接对象conn: ```python # 将DataFrame对象插入数据库中 df.to_sql('名', conn, if_exists='append', index=False) ``` 最后,关闭数据库连接: ```python # 关闭数据库连接 conn.close() ``` 通过以上步骤,就可以实现将csv文件导入已经创建好的数据库中,同时不改变结构头。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值