最近大量从原来的 MySQL 数据库导出数据,再往 SQLite 数据库里导入数据,使用 Navicat 导出导入挺趁手,却没发现,导入了大量格式为【月/日/年】的日期,跟原先导入的格式为【年-月-日】的日期混在一起。
懒得删数据、重新导出导入了,同时也是为了练习一下用 Python 的 sqlite3 操纵数据库,所以就写了几行脚本,几经测试后,成功统一了日期格式。
直接上代码:
利用Python的sqlite3转换日期格式
importsqlite3, os, datetime
os.chdir(r"D:drkPythonSQLSQLite3")
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()forrowindata:
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() 能不能改善性能,只能等日后再研究研究了。