Как использовать psycopg2 для получения значения определенного ключа из таблицы postgres, в которой есть пары ключ-значение - PullRequest
0 голосов
/ 27 марта 2019

Новичок в python, пытающийся использовать psycopg2 для чтения Postgres

Я читаю из таблицы базы данных, которая называется развертыванием, и пытаюсь обработать значение из таблицы с тремя полями id, Key и Value

import psycopg2
conn = psycopg2.connect(host="localhost",database=database, user=user, password=password)
cur = conn.cursor()
cur.execute("SELECT \"Value\" FROM deployment WHERE (\"Key\" = 'DUMPLOCATION')")
records = cur.fetchall()
print(json.dumps(records))
[["newdrive"]]

Я хочу, чтобы это было просто "newdrive", чтобы я мог сделать сравнение строк в следующей строке, чтобы проверить, является ли он "newdrive" или нет

Я пробовал json.loads на выходе json.dumps, не работает

>>> a=json.loads(json.dumps(records))
>>> print(a)
[['newdrive']]

I also tried to print just the records without json.dump
>>> print(records)
[('newdrive',)]

1 Ответ

2 голосов
/ 27 марта 2019

Результатом fetchall() является последовательность кортежей.Вы можете перебрать последовательность и вывести первый (индекс 0) элемент каждого кортежа:

cur.execute("SELECT \"Value\" FROM deployment WHERE (\"Key\" = 'DUMPLOCATION')")
records = cur.fetchall()
for record in records:
    print(record[0])

Или проще, если вы уверены, что запрос возвращает не более одной строки, используйте fetchone(), что даетодин кортеж, представляющий возвращаемую строку, например:

cur.execute("SELECT \"Value\" FROM deployment WHERE (\"Key\" = 'DUMPLOCATION')")
row = cur.fetchone()
if row: # check whether the query returned a row
    print(row[0])
...