用excel怎么直接转成数据库

记得有一次帮朋友整理销售数据,他用的Excel电子表格数据之多,简直让人眼花缭乱。
它需要一种快速的方法将数据导入数据库以便于分析和查询。
我尝试直接使用Excel的“获取外部数据”功能,但是导入表中的列名全是乱七八糟的,差点把我吓死。
接下来我想如果我把Excel转换成CSV格式然后导入应该就没有问题了。
然后,我教他如何将其另存为 CSV,然后无缝导入到 MySQL 数据库中。
他很高兴,说比手工录入快多了,而且数据库也易于管理。

等一下,我还记得导入数据后,我特意用SQL语句随机查询了一些数据,发现和Excel的一致,这让我心里很舒服。
不过后来听有人说,直接用Python脚本处理数据不仅效率高,而且还可以进行一些复杂的处理,比如数据清洗、转换等。
我突然想到,如果下次遇到类似的问题,我可以试试Python吗?毕竟,编程能力越用越强大。

玩转SQLite5:使用Python来读写数据库

有一天在咖啡店里,坐在我旁边的那个人正在电脑上敲代码,突然皱起眉头说:“SQLite 又出错了。
”调试了半天,发现忘记添加conn.commit()。
当你开始学习数据库时;缓解问题;将所有的功能互相相加,结果会提醒你所有的数据都白输入了。

示例: 蟒蛇 演示错误:批量插入期间忘记提交。
conn = sqlite3 .connect('test.db'); 光标 = conn.cursor() cursor.execute('如果不存在项目则创建表 (id INTEGER PRIMARY KEY, name TEXT)') items = [(i, f'Item{i}') 部分(1 0)] for i cursor.executemany('插入值(?, ?)', items); 直接关闭,什么也不保存。
使用conn.close()
后发现表为空。
添加 conn.commit() 后立即提交数据。

参数化查询尤其重要。
我看到有人写了cursor.execute("UPDATE users SETage=%s WHERE name=%s", (3 0, 'John'))))) 并且所有结果数据都搞乱了。
SQLite 使用问号空格,而不是 %s 或 :1
Python 正确示范。
cursor.execute("更新用户设置年龄=?哪里姓名=?",(3 0,'约翰'))
还有一个细节; sqlite3 .Row 可以像字典一样获取结果值: 蟒蛇 conn.row_factory = sqlite3 .Row 光标.execute('从用户中选择'); 行 = 游标.fetchone() print(row['name']) 直接使用键名
但是会慢一点,因为类型转换将在内部完成。

等等,还有一个。
在 Linux 系统上,您可以使用 :memory: 连接来创建内存数据库。
动作结束后,用conn.close()直接消失,特别适合瞬态测试。
但是,此功能在 Windows 下可能会有所不同。

如果表有自增主键;如果我传递 None 或 sqlite3 ,它会突然发生。
IntegrityError 可能会在安装过程中自动使用最后一个值。

Python 安装时id不存在。
cursor.execute('用户(姓名、年龄)VALUES (?, ?)', ('Zoe', 2 7 )) print(cursor.lastrowid) 返回最新的自增 ID

最近使用 SQLite 时;通常以这种方式包裹它。
蟒蛇 使用 sqlite3 .connect('db.db') 作为 conn 光标 = conn.cursor() 光标.execute('如果不存在则创建表(数据文本)') cursor.execute('温度值(?)', ('你好',)) 将会有一个自动提交
,但有时当您需要精确保存进度时,手动 commit() 与分步过程一样有用。

最后这个 fetchmany() 真的很有用。
上次处理1 0万条日志数据;我用fetchall()直接冻结了计算机。
相反,我使用了cursor.fetchmany(1 000),它在一秒钟内就完成了。

所以在编写数据库函数时,首先要考虑的是: 1 . 这个系统是什么? 2 . 森林有多大? 3 . 原子导入有必要吗?
比如写爬虫存储数据的时候,我喜欢用fetchmany来批量写,不占用内存,也不用担心丢失。
但是当读取简单的配置时,fetchall() 是最简单的方法。

等一下,您可以通过使用超时参数来防止数据库变得繁忙和锁定。
例如: 蟒蛇 conn = sqlite3 .connect('db.db', timeout=5 .0) 5 秒后自动重试
看起来……我忘记在哪里使用它了。