2014-12-04 4 views
6

У меня есть флеш-приложение, использующее флакон-SQLAlchmey. У меня есть модель дб, как этотКак я могу запросить данные, отфильтрованные столбцом JSON в SQLAlchemy?

from sqlalchemy.dialects.postgresql import JSON 
from flask.ext.sqlalchemy import SQLAlchemy 

...

db = SQLAlchemy() 

...

class Custom(db.Model): 
    __tablename__ = 'custom' 
    ... 
    data = db.Column(JSON) 
    ... 

поле данных, как это: [{"type": "a string", "value": "value string"}, {"type": "another", "value": "val"}, ...]

Я хочу запрос все изготовленный под заказ объектов, их данные содержат {"type": "anything", "value": "what I want"}.

ответ

7

Я нашел его с помощью cast:

from sqlalchemy.types import Unicode 
# codes... 
Custom.query.filter(Custom.data['value'].astext.cast(Unicode) == "what I want") 
+1

Документация для этого можно найти здесь: http://docs.sqlalchemy.org/en/latest/dialects/postgresql.html#sqlalchemy.dialects .postgresql.JSON – Stew

2

Предполагая, что ваша таблица называется «custom», а поле json называется «data», следующий оператор sql получит ваши результаты, где подполе значения равно «что я хочу».

sql = text("select * from custom where data->>'value'= 'what I want'") 
result = db.engine.execute(sql) 
Смежные вопросы