Я разрабатываю API с flask_restplus
и flask_sqlalchemy
, и у меня есть особый случай, когда определенные приложения должны получать доступ только к определенным столбцам из API.
У меня есть модель:
class MyModel(db.Model):
__tablename_ = 'my_table'
id = db.Column(db.Integer, primary_key=True)
first_column = db.Column(db.Unicode)
second_column = db.Column(db.Unicode)
Я также указал flask_resplus
'модель, которая будет возвращена из API:
my_model = api.model('MyModel',
{'first_column': fields.String(),
'second_column': fields.String()})
Где api
- это экземпляр flask_restplus
' Api
и db
flask_sqlachmey
экземпляр.
Иногда я хочу выбрать только некоторые из столбцов, а другой столбец будет null
в api.model
, который возвращается как ответ JSON.
После поиска в Интернете я нашел два метода, которые ни один из них не работает в моем случае: load_only()
из sqlalchemy.orm
, который возвращает столбцы как list
.В результате я не могу вернуть эти результаты, так как моя модель ожидает словарь с такими же ключами, как описано в my_model
.Другой метод, with_entities()
, возвращает экземпляр MyModel
, что мне и нужно, но он загружает все столбцы в тот момент, когда я передаю этот экземпляр в my_model
, поскольку он выполняет только отложенный выбор, т.е.выбирает указанные столбцы, но если требуются другие столбцы, он снова выполняет запрос, чтобы получить значения других столбцов, таким образом загружая, в моем случае, все столбцы, а это не то, что мне нужно.Кто-нибудь знает, как сделать SQL SELECT
, когда возвращаются только некоторые из столбцов, а результат является экземпляром db.Model
?
Заранее спасибо!