Я пытаюсь использовать python для генерации списка уникальных идентификаторов, которые можно использовать в качестве индексов в таблице в нашей базе данных DB2. Мой начальный ввод - это список идентификаторов, взятых из отдельной таблицы. Мне нужно взять этот список идентификаторов и сгенерировать список других идентификаторов (поместите в переменную formlist здесь). Эти другие идентификаторы должны быть уникальными и не должны уже существовать в целевой таблице базы данных (имя таблицы ниже отображается как FORM_RPT
Пока что я попробовал следующее:
import ibm_db_dbi
import ibm_db
import numpy as np
import pandas as pd
class Gen_IDs():
def __init__(self, mycon, opt_ids):
"""Create an ID Generator object, requires an opt_id list as argument"""
self.mycon = mycon
self.opt_ids = opt_ids
def gen_form(self):
"""generates unique form ids based off an option list"""
sql = """SELECT *
FROM FORM_RPT"""
df = pd.read_sql(sql, self.mycon)
formlist = list(df["FORM_RPT_ID"])
stack = 0
opt_list = []
while(stack < len(self.opt_ids)):
f = np.random.randint(1000, 9999)
#if f in df['FORM_RPT_ID'].values:
if formlist.count(f) > 0:
pass
if f in opt_list:
pass
else:
opt_list.append(f)
stack += 1
return opt_list
Этот код генерирует просто отлично, но, к моему недоразумению, небольшая часть сгенерированных идентификаторов все еще отображается как существующая в целевой базе данных. Сгенерированные идентификаторы должны быть 4-значными.
Вот пример того, как это будет работать:
optionList = [1001, 1002, 1003, 1004, 1005]
formlist = [2001, 2002, 2003, 2004, 2005]
gm = Gen_Ids(optionList)
new_form_list = gm.gen_form()
В настоящее время я получаю возвращенный список, но новый список иногда будет иметь идентификаторы, которые существуют в моей переменной formList .