使用psycopg2获取具有键值的表中的值

时间:2019-03-27 23:23:44

标签: python postgresql psycopg2

我正在尝试使用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)

0 个答案:

没有答案