首頁 > 軟體

mysql資料插入覆蓋和時間戳的問題及解決

2022-03-25 13:02:40

資料插入覆蓋和時間戳問題

1.資料插入問題

當我們insert資料時,插入datetime型別,此型別的欄位,儲存資料格式為:  YYYY-MM-DD,它支援的範圍為'1000-01-01'到'9999-12-31',並且允許使用字串或數位為此列複製。

日期賦值時,允許“不嚴格”語法:任何標點符都可以用做日期部分或時間部分之間的間割符。例如,'98-12-31 11:30:45'、'98.12.31 11+30+45'、'98/12/31 11*30*45'和'98@12@31 11^30^45'是等價的,對於不合法的將會轉換為:0000-00-00 00:00:00

我們傳的時候 insert into test(count_data) values (20190922). 不要把20190922轉為2019-09-22

使用ignore關鍵字,避免重複插入記錄可以使用:(主健會變化)

insert ignore into student_task_trace (student_id) VALUES (20)

使用Replace,如果舊記錄與新記錄有相同的值,則在新記錄被插入之前,舊記錄被刪除,存入新紀錄:

REPLACE INTO student_task_trace (student_id) VALUES (20)

如果有主鍵的情況下,可以通過惟一索引來防止重複資料的插入

資料插入一個事件的時候 有好幾個不同的值 總會覆蓋 ,所以需要給不同值的欄位設定個唯一索引。

除非清空(truncate  表名)

2. 時間加減問題

如果想做時間加減的話 必須把時間變成unix時間戳 如當前時間—建立時間

SELECT user_id, device, UNIX_TIMESTAMP(create_time) create_time from t_user

int(time.time() - create_time).   不轉unix無法操作

3. 時間格式化問題

如果想讓時間正常顯示,就需要在寫sql的時候給他做格式化

SELECT DATE_FORMAT(grant_end_time, '%%Y-%%m-%%d') grant_end_time from xxxx

覆蓋舊資料的mysql插入

1、新增唯一索引需要保證該值只有一個

2、唯一索引需要放在最前面

3、更新的資料需要在list後面再新增一個來更新

from requests_html import HTMLSession
import pymysql
import json
import time
def mysql_db():
    a = html_data()
    #print(tuple1)
    db = pymysql.connect(
        host="localhost",
        user="root",
        passwd="zdl12345",
        database = "runoob_db",
        charset = "utf8"
    )
    cc = db.cursor()
    #sql1 = "create table sites2(id int primary key not null auto_increment,rn varchar(255) ,nn varchar(255),ol varchar(255),c2name varchar(255))"
    #cc.execute(sql1)
    #sql3 = "alter table sites2 add unique (nn)"
    #cc.execute(sql3)
    
    #print("add success")
    cc.execute("select * from sites2")
    results = cc.fetchall()
    
    #print(zb_list)
    list = []
    for i in target_data:
        #print(i)
        for k in i.keys():
            #print(key)
        
            if k == "c2name":
                list = [i["nn"],i["rn"],str(i["ol"]),i["c2name"],str(i["ol"])]
                tuple1 = tuple(list)
                #print(tuple1)
                
                sql = "insert into sites2(nn, rn, ol, c2name) values (%s, %s, %s, %s) on duplicate key update ol = %s"
                val = tuple1
                cc.execute(sql,val)
                db.commit()
                
    db.close()
    print("insert success")
def html_data():
    global target_data
    session = HTMLSession()
    url = "https://www.douyu.com/gapi/rkc/directory/1_1/1.html"
    #headers = {'Accept-Charset': 'UTF-8'}
    database = session.get(url)
    data = database.html.text
    #print(data)
    
    jsondata = json.loads(data)
    #print(jsondata)
    target_data = jsondata["data"]["rl"]
    #print(target_data[0])
    #print(type(target_data))
    #return target_data
                 
#html_data()
#while True:
    
    mysql_db()
    time.sleep(1)
    data2 = time.time()
    s = data2 - data1        

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com