【问题标题】:Postgresql - JSON to ArrayPostgresql - JSON 到数组
【发布时间】:2018-12-02 13:01:38
【问题描述】:

我已经在我的数据库中创建了这个表;

query = """CREATE TABLE INGREDIENTS(
        RECIPE_NAME VARCHAR(50) REFERENCES RECIPES(NAME) ON DELETE CASCADE,
        ID SERIAL REFERENCES RECIPES(ID) ON DELETE CASCADE,
        DATA JSON NOT NULL,
        PRIMARY KEY(RECIPE_NAME,ID))"""

然后我插入这一行;

query = """INSERT INTO INGREDIENTS VALUES
    ('Sushi','1','{"ingredients": ["Fish","Rice","Seaweed"], 
    "amounts": ["1","250gr","100gr"]}')"""

我想以数组的形式获取成分和数量。我运行这个查询;

query = """SELECT DATA->>'ingredients' FROM INGREDIENTS WHERE ID = %s"""

但它给了我写作;

('["Fish","Rice","Seaweed"]',)

我应该怎么做才能获得像数组一样的数据而不是"s and ['s 的一行字符串?谢谢。

(我正在使用 Python 和 Flask)

【问题讨论】:

  • 不用这种方式从数据库中获取,可以通过dict进程获取你想要的数据。
  • 请检查我的答案,如果它对你有用,请接受/投票,这样它也可以帮助其他人寻求答案。请阅读:stackoverflow.com/help/someone-answers

标签: python json postgresql flask


【解决方案1】:
import ast

coming_database_value = [('{"ingredients": ["Fish","Rice","Seaweed"], "amounts": ["1","250gr","100gr"]}',),]

data = ast.literal_eval(coming_database_value[0][0])

print(data['ingredients'])

输出:

['Fish', 'Rice', 'Seaweed']

【讨论】:

    【解决方案2】:

    您从数据库中正确选择了它,DATA->>'ingredients' 确实从 Postgres 返回了一个数组。问题是您正在显示 cur.fetchall() 的全部内容,它返回一个元组列表。

    >>>rows = cur.fetchall()
    >>>print ( type(rows))
    >>>print (rows)
    
    <class 'list'>
    [('["Fish","Rice","Seaweed"]',)]
    

    如果你想要元素,循环遍历列表并在特定索引处显示每个元组的元素。

    >>>for row in rows:
        print ("Ingredients:  ", row[0] )
    
    Ingredients:   ["Fish","Rice","Seaweed"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 2017-03-22
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多