p2.py代码如下:
import random
import string
def gen_activation_code(id,length = 12):
'''
产生激活码
'''
prefix = hex(int(id))[2:] + 'h'
#print(prefix)
foo = hex(int(id))
#print(foo)
#print foo[0],foo[1]
length = length - len(prefix)
chars = string.ascii_letters + string.digits
activation_code = prefix + ''.join([random.choice(chars) for i in range(length)])
return activation_code
def hex_to_dec(hex_num):
return int(hex_num.upper(),16)
if __name__ == '__main__':
for i in range(10,300,15):
code = gen_activation_code(i)
id_hex = code.split('h')[0]
id = hex_to_dec(id_hex)
#print type(id)
print code,id
p3.py代码如下:
import MySQLdb
import p2
con = MySQLdb.connect('127.0.0.1','root','newpassword','testdb')
with con:
cur = con.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS Code2(ID INT PRIMARY KEY,ACTIVATION VARCHAR(20))")
for i in range(100,500,100):
co = p2.gen_activation_code(i)
id_hex = co.split('h')[0]
id = p2.hex_to_dec(id_hex)
cur.execute("insert into Code2(ID,ACTIVATION) VALUES(%s,%s)",(id,co))
con.commit()
cur.close()
这两段代码的主要目的就是产生很多随机码然后保存到MySQL中,可是我发现,程序第一遍运行没问题,再多运行一次,就会报错:
根据报错的信息,反应时主键键值不唯一,有重复而导致无法插入数据库。
而当我将表的名字改过之后(code改为code1),又可以运行,当运行第二遍又会有同样的错误产生,求解答。
主键不唯一就是主键不唯一啊 ,有啥好解释的。。。。
第一遍生成了 100、200、300、400,4个主键,和4个随机字符串,插入到数据库中
第二遍运行是同样的结果,只是随机串不同,可你数据库里已经有了这4个主键, 还怎么插?