使用psycopg2在表中获取键为Valu的值

2024-04-20 05:39:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用psycopg2来阅读Postgres。你知道吗

我正在从一个名为deployment的数据库表中读取数据,并尝试从一个包含三个字段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\u factory=DictCursor返回dict而不是Tuple?你知道吗

++用解决方案编辑-以下是我最后的工作++

我最终发现行是一个元组,行[0]是一个字符串。所以我用json.loads文件将其转换为json对象。然后我就可以打印这个区域了

    row = cur.fetchone()
    config_json = json.loads(row[0])
    region = config_json['configone']['region']
    print('Region: %s', region)

Tags: keyconfigjsonvaluedeploymentargspsycopg2region