mysql int 科学计数法_为什么 要弄清楚 mysql int(5) int(11) bigint 自建mysql主键id python random 科学计数法...

场景:

有1.2亿条问答数据,相同问题的不同答案为不同条的数据,且该表数据逐日递增;

第三方需求(不合理):

将问题、答案数据分别放入问题表、答案表;

问题表的主键为整数,在答案表中,每行数据有相应的问题表的主键值;

为加快写入速度,不去问题表查找主键id,而在写库前,由脚本生成问题表的主键id,分别写入问题表、答案表;

生成算法:

11位时间戳+4位随机数

注意:时间戳至少11位;(千年代码)

mktime2date(1543400352) #2018-11-28 18:19:12

mktime2date(2543400352)

mktime2date(11543400352)

2018-11-28 18:19:12

2050-08-06 20:05:52

2335-10-19 12:05:52

取19位

while True:

s = str(time.time()).replace('.', '')[0:11] + str(random.random()).replace('0.', '')[0:8]

print(len(s), ':', s)

sql = 'INSERT INTO testtab (id,v) VALUES ({},{});'.format(s, s)

mysql_write(sql, mysql_key=mysql_key)

bigint 2**32 /2 最多20位

实际越限制,取19位

CREATE TABLE `testtab` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`v` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=9223372036854775807 DEFAULT CHARSET=utf8;

id v

1543481843334780969 1543481843334780969

1543481843635608877 1543481843635608877

1543481843922917607 1543481843922917607

1543481844262030440 1543481844262030440

1543481844454898236 1543481844454898236

1543481844753212767 1543481844753212767

1543481845071223819 1543481845071223819

1543481845310268788 1543481845310268788

1543481845574891236 1543481845574891236

1543481845801856854 1543481845801856854

1543481846122573779 1543481846122573779

1543481846437020403 1543481846437020403

1543481846688148132 1543481846688148132

1543481846961211022 1543481846961211022

1543481847216052080 1543481847216052080

1543481847589641016 1543481847589641016

1543481847709827395 1543481847709827395

1543481848042075766 1543481848042075766

1543481848361608572 1543481848361608572

1543481848613226664 1543481848613226664

1543481848829092584 1543481848829092584

1543481849104387422 1543481849104387422

def gen_mysql_pk_bigint():

s = str(time.time()).replace('.', '')[0:11] + str(random.random()).replace('0.', '')[0:8]

if len(s) < 19:

s = '{}{}'.format(s, ''.join(['9' for i in range(8)]))[0:19]

return s

C:\Users\sas\.PyCharm2017.2\system\python_stubs\-1603771140\_random.py

def random(self): # real signature unknown; restored from __doc__

""" random() -> x in the interval [0, 1). """

pass

import time, random

def gen_mysql_pk_bigint():

# int(time.time())

# 13=11+2

s0=random.random()

s1, s2 = str(time.time()).replace('.', '')[0:13], str(s0).replace('0.', '')[0:6]

s = s1 + s2

# 19-11=8

if len(s) < 19:

s = '{}{}'.format(s, ''.join(['9' for i in range(8)]))[0:19]

if '.' in s:

print('s0',s0)

print('s',s)

print(s1)

print(s2)

return s

while True:

gen_mysql_pk_bigint()

s0 4.542730178391796e-05

s 15435447395814.5427

1543544739581

4.5427

s0 3.257238433707066e-05

s 15435447395993.2572

1543544739599

3.2572

s0 4.646998949264791e-05

s 15435447396164.6469

1543544739616

4.6469

s0 2.2152567914712762e-05

s 15435447396202.2152

1543544739620

2.2152

s0 1.5478322555884105e-05

s 15435447396271.5478

1543544739627

1.5478

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值