我正在尝试使用psycopg2
来阅读Postgres
。
我正在从名为Deployment的数据库表中读取数据,并尝试从具有三个字段id(键和值)的表中处理值。
其中一个键是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而不是Tuple来返回字典?
++使用解决方案进行编辑-以下是最终对我有用的内容
我最终发现row是一个元组,row [0]是一个字符串。因此,我在row [0]上使用json.loads将其转换为json对象。然后我可以打印该区域
row = cur.fetchone()
config_json = json.loads(row[0])
region = config_json['configone']['region']
print('Region: %s', region)