MySQL:用随机值更新多行
MySQL: Update multiple rows with random values
我有一个叫 rainfall
的 table。它有 2 列 (sensorID, area, time, rainfall, redalert)
我想以 5 分钟为间隔随机填充 time 列(例如 12:55、04:30、07:45) .我设法通过使用此 Python 代码获得了随机时间:
import mysql.connector
import random
import datetime
import time
MINTIME = datetime.datetime(2020,4,1,0,0,0)
MAXTIME = datetime.datetime(2020,7,1,0,0,0)
mintime_str = int(time.mktime(MINTIME.timetuple())) #convert date to INT
maxtime_str = int(time.mktime(MAXTIME.timetuple())) #convert date to INT
no_steps = (maxtime_str - mintime_str)//(5*6) #state the number of minutes interval to 5 minutes
sql = "UPDATE rainfall SET date = %s"
rand = ''
for RECORD in range(108):
random_slot = random.randint(0, no_steps)
random_ts = mintime_str + 5*60 * random_slot
RANDOMTIME = datetime.datetime.fromtimestamp(random_ts)
rand = datetime.datetime.strftime(RANDOMTIME, '%H:%M')
val = (rand,)
mycursor.execute(sql, val)
raindb.commit()
print(mycursor.rowcount, "record(s) affected")
问题是此代码仅用 1 个值填充 time 中的所有行:
我需要在每一行中使用不同的值。如果某些行具有重复的时间值,那很好。
提前致谢
您只能使用 SQL 来完成:
update rainfall
set time = concat(
lpad(floor(rand() * 24), 2, '0'),
':',
lpad(floor(rand() * 12) * 5, 2, '0')
);
我会使用 rand()
如下:
update rainfall
set time = sec_to_time(floor(rand() * 60 * 60 * 24 / (5 * 60) * 5 * 60)
表达式rand() * 60 * 60 * 24
给你一个代表时间的随机秒数。然后,您可以使用 floor()
和乘法将其四舍五入到最接近的 5 分钟。最后,time_to_sec()
将其变为 time
。
我有一个叫 rainfall
的 table。它有 2 列 (sensorID, area, time, rainfall, redalert)
我想以 5 分钟为间隔随机填充 time 列(例如 12:55、04:30、07:45) .我设法通过使用此 Python 代码获得了随机时间:
import mysql.connector
import random
import datetime
import time
MINTIME = datetime.datetime(2020,4,1,0,0,0)
MAXTIME = datetime.datetime(2020,7,1,0,0,0)
mintime_str = int(time.mktime(MINTIME.timetuple())) #convert date to INT
maxtime_str = int(time.mktime(MAXTIME.timetuple())) #convert date to INT
no_steps = (maxtime_str - mintime_str)//(5*6) #state the number of minutes interval to 5 minutes
sql = "UPDATE rainfall SET date = %s"
rand = ''
for RECORD in range(108):
random_slot = random.randint(0, no_steps)
random_ts = mintime_str + 5*60 * random_slot
RANDOMTIME = datetime.datetime.fromtimestamp(random_ts)
rand = datetime.datetime.strftime(RANDOMTIME, '%H:%M')
val = (rand,)
mycursor.execute(sql, val)
raindb.commit()
print(mycursor.rowcount, "record(s) affected")
问题是此代码仅用 1 个值填充 time 中的所有行:
我需要在每一行中使用不同的值。如果某些行具有重复的时间值,那很好。
提前致谢
您只能使用 SQL 来完成:
update rainfall
set time = concat(
lpad(floor(rand() * 24), 2, '0'),
':',
lpad(floor(rand() * 12) * 5, 2, '0')
);
我会使用 rand()
如下:
update rainfall
set time = sec_to_time(floor(rand() * 60 * 60 * 24 / (5 * 60) * 5 * 60)
表达式rand() * 60 * 60 * 24
给你一个代表时间的随机秒数。然后,您可以使用 floor()
和乘法将其四舍五入到最接近的 5 分钟。最后,time_to_sec()
将其变为 time
。