【发布时间】:2017-03-23 17:12:59
【问题描述】:
我必须访问一个非常混乱的 postgresql 数据库。一张表有三列:
PK [PK]Bigint| a_key [PK] text[] | a_val text[]
1, {name, job, age}, {'John', 'Eng', '31'}
2, {job, ID}, {'IT', '1234'}
3, {ID, age, name, BFF}, {'4321', '22', 'Piet', 'John'}
我正在尝试在 python 中使用一些 sqlalchemy 来根据键/值对中的值查找行的主键:
RETURN PK where name == 'John'
我可以获取所有具有“名称”条目的行,然后在 python 中循环查找“约翰”:
obj = session.query(table).filter(table.c.a_key.any(u'name')).all()
但我宁愿让数据库将其全部弄清楚并返回“PK”。有什么想法吗?
【问题讨论】:
-
如果这些列是数组类型,你应该取消嵌套 em 并比较两列
-
{'John', 'Eng', '31'}既不是文本[],也不是 JSON - 它只是一个文本 - 对吧?... -
PGadmin 说他们是 text[]
-
然后我猜数据填充错误 -
a_val[1]不是John,而是'John'... 无论如何 - 你可以使用 unnest,我在答案中发布了示例 -
我从不相信注释代码的其他人那里继承了这个烂摊子,并且认为变量名是一种稀缺资源,应该尽可能多地重用......有很多错误。
标签: python postgresql sqlalchemy key-value