Я пытаюсь использовать psycopg2
для чтения Postgres
.
Я читаю из таблицы базы данных, которая называется развертывание, и пытаюсь обработать значение из таблицы с тремя полями: id, Key и Value.
Один из ключей - LIST_CONFIG
, и он имеет значение в следующем виде:
list_config: {
"configone":{
"disk_size":100,"machine_type":"large","region":"us-west-1"},
"configtwo":{
"projectname":"project","zone":"us-east1-b"}
}
Я пытаюсь получить регион для list_config.configone.region
(то есть us-west-1)
Я получаю выше list_config
, запустив следующий код:
import psycopg2
conn = psycopg2.connect(host="localhost",database=database, user=user, password=password)
cur = conn.cursor()
cur.execute("SELECT \"Value\" FROM deployment WHERE (\"Key\" = 'LIST_CONFIG')")
row = cur.fetchone()
print(row[0])
Я не могу получить list_config.configone.region
даже после выполнения следующих действий:
row = cur.fetchone()
config = row[0]
print('config: %s', config["configone"])
Я получил ошибку Arguments: (TypeError('string indices must be integers',),)
Я также попробовал следующее
row = cur.fetchone()
config=row[0]
args=namedtuple('row',config.keys()).*config.values())
print('args: %s', args)
Это дало ошибку Arguments: (AttributeError("'str' object has no attribute 'keys'",),)
Есть ли способ использовать cursor_factory= DictCursor, который будет возвращать dict вместо Tuple?
++ Редактирование с помощью решения - Следующее - это то, что сработало для меня в конце ++
В конце концов я обнаружил, что строка - это кортеж и строка[0] это строка.Поэтому я использовал json.loads в строке [0], чтобы преобразовать его в объект json.Тогда я смог напечатать регион
row = cur.fetchone()
config_json = json.loads(row[0])
region = config_json['configone']['region']
print('Region: %s', region)