【发布时间】:2019-03-18 19:30:25
【问题描述】:
我正在尝试使用 python 生成一个唯一 ID 列表,这些 ID 可以用作我们 DB2 数据库中表的索引。我的起始输入是来自单独表格的 id 列表。我需要获取这个 id 列表并生成其他 id 列表(放置在 formlist 变量中)这些其他 id 必须是唯一的,并且不能已经存在于目标数据库表中(表名是下面显示为 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
这段代码生成得很好,但令我困惑的是,一小部分生成的 id 仍显示为存在于目标数据库中。生成的 id 需要是 4 位整数。
这是一个如何工作的示例:
optionList = [1001, 1002, 1003, 1004, 1005]
formlist = [2001, 2002, 2003, 2004, 2005]
gm = Gen_Ids(optionList)
new_form_list = gm.gen_form()
目前我得到了一个返回的列表,但新列表有时会有我的 formList 变量中存在的 id。
【问题讨论】:
标签: sql python-3.x pandas list db2