mysql數(shù)據(jù)插入覆蓋和時間戳的問題及解決
數(shù)據(jù)插入覆蓋和時間戳問題
1.數(shù)據(jù)插入問題
當我們insert數(shù)據(jù)時,插入datetime類型,此類型的字段,存儲數(shù)據(jù)格式為: YYYY-MM-DD,它支持的范圍為'1000-01-01'到'9999-12-31',并且允許使用字符串或數(shù)字為此列復制。
日期賦值時,允許“不嚴格”語法:任何標點符都可以用做日期部分或時間部分之間的間割符。例如,'98-12-31 11:30:45'、'98.12.31 11+30+45'、'98/12/31 11*30*45'和'98@12@31 11^30^45'是等價的,對于不合法的將會轉(zhuǎn)換為:0000-00-00 00:00:00
我們傳的時候 insert into test(count_data) values (20190922). 不要把20190922轉(zhuǎn)為2019-09-22
使用ignore關(guān)鍵字,避免重復插入記錄可以使用:(主健會變化)
insert ignore into student_task_trace (student_id) VALUES (20)
使用Replace,如果舊記錄與新記錄有相同的值,則在新記錄被插入之前,舊記錄被刪除,存入新紀錄:
REPLACE INTO student_task_trace (student_id) VALUES (20)
如果有主鍵的情況下,可以通過惟一索引來防止重復數(shù)據(jù)的插入
數(shù)據(jù)插入一個事件的時候 有好幾個不同的值 總會覆蓋 ,所以需要給不同值的字段設(shè)置個唯一索引。
除非清空(truncate 表名)
2. 時間加減問題
如果想做時間加減的話 必須把時間變成unix時間戳 如當前時間—創(chuàng)建時間
SELECT user_id, device, UNIX_TIMESTAMP(create_time) create_time from t_user
int(time.time() - create_time). 不轉(zhuǎn)unix無法操作
3. 時間格式化問題
如果想讓時間正常顯示,就需要在寫sql的時候給他做格式化
SELECT DATE_FORMAT(grant_end_time, '%%Y-%%m-%%d') grant_end_time from xxxx

覆蓋舊數(shù)據(jù)的mysql插入
1、添加唯一索引需要保證該值只有一個
2、唯一索引需要放在最前面
3、更新的數(shù)據(jù)需要在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
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mysql報Table?'mysql.user'?doesn't?exist問題的解
這篇文章主要給大家介紹了關(guān)于Mysql報Table?'mysql.user'?doesn't?exist問題的解決方法,初學者可能會遇到這個問題,文中通過圖文將解決方法介紹的非常詳細,需要的朋友可以參考下2022-05-05
MySQL for update鎖表還是鎖行校驗(過程詳解)
在MySQL中,使用for update子句可以對查詢結(jié)果集進行行級鎖定,以便在事務(wù)中對這些行進行更新或者防止其他事務(wù)對這些行進行修改,這篇文章主要介紹了MySQL for update鎖表還是鎖行校驗,需要的朋友可以參考下2024-02-02

