Как я могу напечатать уникальный код в соответствии с циклом, если есть то же значение? - PullRequest
0 голосов
/ 05 апреля 2019

как я могу напечатать уникальный код в соответствии с циклом, если есть такое же значение?

FullChar = 'CEFLMPRTVWXYK0123456789'
total = 1000
count = 10
count = int(count)
entries = []
bcd = ""
flg = ""
rll = ""

try:
    conn = psycopg2.connect(host="192.168.13.10",database="postgres", port="5432", user="postgres", password="potatona1")
    cursor = conn.cursor()

    def inputDatabase(data):
        postgres_insert_query = """INSERT INTO unique_code(unique_code, barcode, flag, roll) VALUES (%s,%s,%s,%s)"""
        cursor.executemany(postgres_insert_query, data)
        conn.commit()


    for i in range(5):
        for x in range(total):    # banyaknya code yang di print
            unique_code = ''.join(random.sample(FullChar, count - 1))
            unique_code = ''.join(random.sample(unique_code, len(unique_code)))

        entry = (unique_code, bcd, flg, rll)
        entries.append(entry)

        inputDatabase(entries)
        print(i)

    count = cursor.rowcount
    print (count, "Record inserted successfully into mobile table")

except (Exception, psycopg2.DatabaseError) as error:
    print(error)
    conn.rollback()

exmp: если этот код MTY9X4L2E появится снова / дублируется, цикл остановится и я получаю это сообщение двойное значение ключа нарушает ограничение уникальности "unique_code_pkey"

1 Ответ

1 голос
/ 06 апреля 2019

Чтобы отслеживать уникальные значения, используйте set .

unique_codes = set()
...
for i in range(5):
    for x in range(total):    # banyaknya code yang di print
        unique_code = ''.join(random.sample(FullChar, count - 1))
        unique_code = ''.join(random.sample(unique_code, len(unique_code)))
    if unique_code in unique_codes:
        # The unique code has already been used.
        # Do something?
    else:
        # Add the code to the set of used codes.
        unique_codes.add(unique_code) 

Не очень понятно, что делают эти циклы; unique_code перезаписывается при каждой итерации внутреннего цикла.

В примере кода есть другая проблема: список entries никогда не очищается, поэтому вторая итерация внешнего цикла вызовет ошибку дублирующегося ключа, поскольку entries содержит не только новые данные, но также данные из предыдущего итерация. entries следует очищать или повторно инициализировать после каждого вызова inputDatabase.

inputDatabase(entries)
entries.clear()
...