Python Dedupe.io проблема чтения данных с SQL сервера - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь получить большой набор данных с сервера SQL и дедуплицировать информацию, используя библиотеку дедупликации Python. Я использую pyodb c в качестве соединителя базы данных, но я не могу понять, как получить данные в правильном формате, используя SQL Server. Работает нормально на MySQL, но без чтения строки Dict форматирование данных ускользает от меня. В настоящее время я вижу следующую ошибку:

TypeError: индексы строк должны быть целыми числами, а не str

Вот код, который пытается построить данные:

cur = con.cursor()

print("\n\nExecuiting TOMIS Select")
cur.execute(TOMISSelect)
print("\nSelect Complete")
colHeader = [column[0] for column in cur.description]
temp_d = {0:tuple(colHeader)}
temp_data = {(i+1): row for i, row in enumerate(cur)}
temp_d.update(temp_data)

if os.path.exists(training_file):
    print("\nReading labeled examples from ", training_file)
    with open(training_file) as tf:
        deduper.prepare_training(temp_d, tf)
else:
    print("\nManual Training")
    deduper.prepare_training(temp_d)

Вот вывод и полная трассировка:

Manual Training
Traceback (most recent call last):

  File "C:\Users\01-workspace\02-dedupe\TOMISDeDupe\TomisFullDeDupe.py", line 134, in <module>
    deduper.prepare_training(temp_d)

  File "c:\users\01-workspace\02-dedupe\dedupe\dedupe\api.py", line 806, in prepare_training
    self.sample(data, sample_size, blocked_proportion, original_length)

  File "c:\users\01-workspace\02-dedupe\dedupe\dedupe\api.py", line 838, in sample
    index_include=examples)

  File "c:\users\01-workspace\02-dedupe\dedupe\dedupe\labeler.py", line 403, in __init__
    self.candidates = super().sample(data, blocked_proportion, sample_size)

  File "c:\users\01-workspace\02-dedupe\dedupe\dedupe\labeler.py", line 43, in sample
    data)

  File "c:\users\01-workspace\02-dedupe\dedupe\dedupe\sampling.py", line 22, in blockedSample
    *args))

  File "c:\users\01-workspace\02-dedupe\dedupe\dedupe\sampling.py", line 62, in dedupeSamplePredicates
    items)

  File "c:\users\01-workspace\02-dedupe\dedupe\dedupe\sampling.py", line 73, in dedupeSamplePredicate
    column = record[field]

TypeError: row indices must be integers, not str

Я пробовал несколько разных методов для чтения данных с SQL сервера безрезультатно - запросы MySQL сбрасывают данные в правильном формате словаря, и я не могу получить данные в правильном формате, используя SQL Server.

1 Ответ

0 голосов
/ 05 марта 2020

Я думаю, вам нужно сделать что-то вроде

colHeader = tuple(column[0] for column in cur.description)
temp_d = {i: dict(zip(colHeader, row)) for i, row in enumerate(cur)}
...