使用Python和SQLite3模块轻松转换数据库日期格式

发表时间: 2022-04-22 21:09

最近大量从原来的 MySQL 数据库导出数据,再往 SQLite 数据库里导入数据,使用 Navicat 导出导入挺趁手,却没发现,导入了大量格式为【月/日/年】的日期,跟原先导入的格式为【年-月-日】的日期混在一起。

懒得删数据、重新导出导入了,同时也是为了练习一下用 Python 的 sqlite3 操纵数据库,所以就写了几行脚本,几经测试后,成功统一了日期格式。

直接上代码:

利用Python的sqlite3转换日期格式

import sqlite3, os, datetimeos.chdir(r"D:\drkPython\SQL\SQLite3")cwd = os.getcwd()con = sqlite3.connect('DB/opeu.db')con.execute('PRAGMA foreign_keys = ON')cur = con.cursor()sql = """SELECT uid, bday FROM usr	WHERE source = 'IAHR'	AND bday IS NOT NULL"""cur.execute(sql)data = cur.fetchall()for row in data:	bday_old = row[1]	bday_new = datetime.datetime.strptime(bday_old, "%m/%d/%Y")	bday_new = datetime.datetime.strftime(bday_new, "%Y-%m-%d")	print(bday_new)	cur.execute("""UPDATE usr SET bday = ?		WHERE uid = ?""", (bday_new, row[0]))	con.commit()con.close()

代码思路

大致的思路是:找出所有需要转换格式的数据列,利用
datetime.datetime.strptime() 函数将格式为【月/日/年】的字符串转换为时间戳,然后再用
datetime.datetime.strftime() 函数将标准时间戳转换为【yyyy-mm-dd】的字符串,然后用 UPDATE 语句修改数据。

一个一个转换,总共1万条数据,操作了半天,应该是这个方法太笨了,但好歹解决问题了。不知道用 cur.executemany() 能不能改善性能,只能等日后再研究研究了。