僅用時一分半對數據庫一百多萬條數據進行全部讀取寫入(基於python對數據庫進行操作)

我將數據庫中的一百二十一萬一千二百五十六條數據的時間格式轉換成時間戳用時1分半

在這裏插入圖片描述
hold on 氣質這一塊還沒跟上 現在我只想說一句話!!!!

在這裏插入圖片描述
最近一直在做數據整理這一塊的工作(就是將公司之前放在文檔中的數據整理一下存到數據庫中進行數據的實時查看)
終於在我費盡千幸萬苦將數據妥妥的放到數據庫中時,還有最後一項工作就可以完美收官了!(就是將日期轉換成時間戳格式,剛開始還沒想那麼多,但是一想100多瓦條數據,這要是用接口數據來寫這是不是太慢了。。。)然後就想到了python
ok,那廢話不多說 直接本主題 ~

需求分析

根據我們的需求,可以將數據轉換成時間戳分爲兩個步驟,數據庫數據讀取和時間轉換成時間戳這兩步操作

一、數據庫數據讀取(增刪改查)

1.安裝 pymysql 第三方庫

點擊左上角的setting ->加號->pymysql->install->ok
在這裏插入圖片描述

連接測試
#導入庫
import pymysql

# 打開數據庫連接
#host 服務地址
#user 用戶名
#password 密碼
#db 數據庫
#port 端口
db = pymysql.connect(host="localhost", user="xxxx",
                     password="xxxx", db="xxxx", port=3306)

# 使用cursor()方法獲取操作遊標
cur = db.cursor()

如果報錯了的話 看報錯信息 要記得你的賬號密碼喲!
一定要將自動檢測設置打開
在這裏插入圖片描述

查詢操作

這裏的正刪改查就相對與很簡單了 就不一一解釋了

import pymysql  #導入 pymysql

#打開數據庫連接
db= pymysql.connect(host="localhost",user="xxxx",
     password="xxxx",db="xxxx",port=3306)

# 使用cursor()方法獲取操作遊標
cur = db.cursor()

#1.查詢操作
# 編寫sql 查詢語句  user 對應我的表名
sql = "select * from user"
try:
    cur.execute(sql)     #執行sql語句

    results = cur.fetchall()    #獲取查詢的所有記錄
    print("id","name","password")
    #遍歷結果
    for row in results :
        id = row[0]
        name = row[1]
        password = row[2]
        print(id,name,password)
except Exception as e:
    raise e
finally:
    db.close()    #關閉連接

插入操作


import pymysql
#2.插入操作
db= pymysql.connect(host="xxxx",user="xxxx",
     password="xxxx",db="xxxx",port=3306)

# 使用cursor()方法獲取操作遊標
cur = db.cursor()

sql_insert ="""insert into user(id,username,password) values(4,'liu','1234')"""

try:
    cur.execute(sql_insert)
    #提交
    db.commit()
except Exception as e:
    #錯誤回滾
    db.rollback() 
finally:
    db.close()

更新操作

更新操作
db= pymysql.connect(host="localhost",user="root",
     password="123456",db="test",port=3307)

# 使用cursor()方法獲取操作遊標
cur = db.cursor()

sql_update ="update user set username = '%s' where id = %d"

try:
    cur.execute(sql_update % ("xiongda",3))  #像sql語句傳遞參數
    #提交
    db.commit()
except Exception as e:
    #錯誤回滾
    db.rollback() 
finally:
    db.close()

刪除操作

import pymysql
#4.刪除操作
db= pymysql.connect(host="localhost",user="root",
     password="123456",db="test",port=3307)

# 使用cursor()方法獲取操作遊標
cur = db.cursor()

sql_delete ="delete from user where id = %d"

try:
    cur.execute(sql_delete % (3))  #像sql語句傳遞參數
    #提交
    db.commit()
except Exception as e:
    #錯誤回滾
    db.rollback() 
finally:
    db.close()

二、時間轉換爲時間戳

這裏就是我在網上找到的一個時間戳轉換方法體

def timeformat_to_timestamp(timeformat=None, format='%Y-%m-%d'):
        if timeformat:
            time_tuple = time.strptime(timeformat, format)
            res = time.mktime(time_tuple)  # 轉成時間戳
        else:
            res = time.time()  # 獲取當前時間戳
       return int(res)

三、正式實施

ok,到這裏我們的準備工作算是結束了 下面正式開始數據讀取轉換(因數據涉及到公司信息 所以只展示要轉換的部分時間數據 )
這裏我的時間有點不太一樣 來看一下吧(chukuriqi)
在這裏插入圖片描述
我的數據是格式分割不是用-而是用.來分割 並且前面沒有20XX.XX.XX格式 所以我在插入之前要對我的數據進行稍微變化一下

然後轉換過的時間戳數據我新建了一個列來存放我的轉換成時間戳的格式數據 (chukutime)
在這裏插入圖片描述

思路:

首先我要讀取數據庫表中的所有數據 ,然後在循環遍歷,分別拿到我的要轉換成時間戳的字段(chukuriqi) 以及轉換成時間戳存儲到的字段中(chukutime) ,所以我也要拿到 id進行更細操作
剩下的就可以交給編碼了

import pymysql
import time

#時間轉換爲時間戳方法體  其中因爲我的日期格式特殊 所以將%Y-%m-%d  換爲 %Y.%m.%d
def timeformat_to_timestamp(timeformat=None, format='%Y.%m.%d'):
    try:
        if timeformat:
            time_tuple = time.strptime(timeformat, format)
            res = time.mktime(time_tuple)  # 轉成時間戳
        else:
            res = time.time()  # 獲取當前時間戳
     #因我的數據庫中這要轉換時間字段中可能會有格式不正確的這裏直接處理拋出異常 直接將他轉換爲當前時間
    except Exception:
        res = time.time()  # 獲取當前時間戳
    finally:
        return int(res)


# 打開數據庫連接
db = pymysql.connect(host="localhost", user="xxxx",
                     password="xxxx", db="xxxx", port=3306)

# 使用cursor()方法獲取操作遊標
cur = db.cursor()

# 1.查詢操作
# 編寫sql 查詢語句  user 對應我的表名
sql = "select * from 表名"
try:
    cur.execute(sql)  # 執行sql語句
    sql_update = "update 表名 set chukutime = '%s' where id = %d"
    results = cur.fetchall()  # 獲取查詢的所有記錄
    print("id", "chukuriqi", "chukutime")
    # 遍歷結果
    for row in results:
        id = row[0]
        chukuriqi = row[2]
        if row[5] == '':
            print(id, chukuriqi)
            #讀取每一條數據時在前面增加20 使時間格式完整!
            chukutime = timeformat_to_timestamp('20' + str(chukuriqi))
            cur.execute(sql_update % (chukutime, id))  # 像sql語句傳遞參數
            print('時間轉換中')
        else:
            print('loading')

    else:
        #更新數據表中數據
        db.commit()
        print('全部加載完成')
except Exception as e:
    raise e
finally:
   #關閉連接
    db.close()

ok,這就可以和我一樣快了 哈哈哈哈哈哈
詳細的註釋請看代碼
在這裏插入圖片描述
編寫不易,希望看到這裏的小可愛能夠點一波贊 謝謝啦!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章