随机生成MySQL行时确保唯一字段

时间:2011-09-19 14:23:24

标签: python mysql unique-constraint mysql-python

我正在生成大约100,000行随机数据,大约有10列,我需要让所有值都是唯一的。

我能想到这样做的唯一可靠方法是对每个随机生成进行查询,以确保它不存在,但这会增加数十万个查询。另一个选择是在表上创建一个UNIQUE约束,但是我需要有一些方法来计算有多少重复失败,这样我就可以重新创建那些行(我需要知道我将生成完全相同的随机行数)如指定的那样,或者在插入失败时使用新生代重试的东西。有没有办法做到这一点?或者我是否一起错过了其他一些方法?

2 个答案:

答案 0 :(得分:2)

我应该在列表中生成python中的随机数。 然后,使用set来获取唯一身份。

l = [1,5,5,4,5,4,8,9,2]

set(l)

set([1, 2, 4, 5, 8, 9])

现在,您可以生成200.000个数字,以获得至少100.000个唯一数字,并截断列表,或等等。


我试过了:

import random
l = []
for i in range (200000):
    l.append (random.random())
print len(set(l))

它给了我一套200.000的长度。生成的随机内没有重复!

答案 1 :(得分:0)

您填写列的数据类型是什么?是否必须遵循任何特定格式?

无论数据格式如何,我都会离线生成所有数据,然后一次性将其插入数据库。

例如:

from base64 import b64encode
from random import shuffle

arr=[]
for i in range(0,1000000): #Assuming you need 1mil entries
    arr.append(b64encode(str(i)))
shuffle(arr)
#Add arr[] to the database

这样你知道所有的字符串都是唯一的,而shuffle会使订单(更多)随机。