最近大量从原来的 MySQL 数据库导出数据,再往 SQLite 数据库里导入数据,使用 Navicat 导出导入挺趁手,却没发现,导入了大量格式为【月/日/年】的日期,跟原先导入的格式为【年-月-日】的日期混在一起。
懒得删数据、重新导出导入了,同时也是为了练习一下用 Python 的 sqlite3 操纵数据库,所以就写了几行脚本,几经测试后,成功统一了日期格式。
直接上代码:
import sqlite3, os, datetime
os.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() 能不能改善性能,只能等日后再研究研究了。
海报
0 条评论
123
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~