В PostgreSQL ошибку TypeError: не все аргументы преобразуются в строку форматирования

Я выполняю запрос в psycopg2, связанный с базой данных PostgreSQL. Вот код, о котором идет речь:

with open('dataFile.txt', 'r') as f:
    lines = f.readlines()
    newLines = [line[:-1] for line in lines]
    curr=conn.cursor()
    lineString = ','.join(newLines)
    curr.execute("SELECT fields.fieldkey FROM fields LEFT JOIN zone ON zone.fieldkey=fields.fieldkey WHERE zone.zonekey = %s;", (newLines[0]))
    rows = curr.fetchall()

нет проблем с подключением к БД, и тип строк[0] определенно является строкой, я проверил это. Есть ли что-то неправильное в синтаксисе моего форматирования строк?

ошибка, которую я получаю, чтобы уточнить это:

TypeError: not all arguments converted during string formatting

1 ответов


должна быть запятая после lines[0] чтобы сделать это кортеж.

curr.execute("""
    SELECT fields.fieldkey
    FROM fields
    LEFT JOIN zone ON zone.fieldkey=fields.fieldkey
    WHERE zone.zonekey = %s;
""", (lines[0],))

С execute метод ожидает последовательность (или отображение) он повторяет строку, которую вы предоставили, в круглых скобках. Поэтому необходимо явно сделать этот кортеж. Тот же результат, с более четким кодом, можно получить с помощью tuple функции:

(tuple(lines[0]))