DB2 sql: как генерировать уникальные идентификаторы определенной длины - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь использовать 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 .

Ответы [ 2 ]

1 голос
/ 18 марта 2019

вы генерируете идентификатор с помощью row_number()

SELECT *,row_number() over( order by (select null)) as id
    FROM FORM_RPT
0 голосов
/ 18 марта 2019

Создание уникальных идентификаторов - это то, что предоставляют базы данных. Для этого не нужно использовать дополнительное кодирование.

В Db2 вы можете использовать столбцы идентификаторов, если только для одной таблицы или идентификатора последовательности базы данных вы хотите использовать его в качестве отдельного объекта базы данных.

Почему это должно быть определенной длины?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...