Вы можете:
itemsCart. Выберите (c => c. Цена).Sum ();
Для удара дб только однажды сделайте:
var itemsInCart = (from o in db.OrderLineItems
where o.OrderId == currentOrder.OrderId
select new { o.OrderLineItemId, ..., ..., o.WishListItem.Price}
).ToList();
var sum = itemsCart.Select(c=>c.Price).Sum();
дополнительное сохраненное распространение в прямом и обратном направлениях стоит того:)
SQLAlchemy предоставляет ] надежный язык выражений для генерации SQL из Python.
Однако, как и любой другой хорошо спроектированный уровень абстракции, запросы, которые он генерирует, вставляют данные через переменные связывания, а не путем попытки смешивания языка запросов и данных вставлен в одну строку. Такой подход позволяет избежать серьезных уязвимостей в системе безопасности и в остальном является правильным.
python db api 2.0 имеет метод «.execute» для объектов подключения. Вы можете указать параметры (используйте запятую НЕ знак% для отделения параметров от строки запроса) с помощью этой функции.
Для надежности я рекомендую использовать подготовленные операторы для отправки значений, введенных пользователем, независимо от того, какой язык вы используете. : -)
В общем случае указывать параметры вручную - плохая идея. Что делать, если при обходе правил допущена ошибка? Что делать, если escape не соответствует используемой версии БД? Что, если вы просто забыли экранировать какой-либо параметр или ошибочно предположили, что он не может содержать данные, требующие экранирования? Все это может вызвать уязвимость SQL-инъекций. Кроме того, БД может иметь некоторые ограничения на длину оператора SQL, в то время как вам нужно передать большой фрагмент данных для столбца LOB. Вот почему Python DB API и большинство баз данных (модуль Python DB API будет прозрачно экранировать параметры, если база данных не поддерживает это, как это делала ранняя MySQLdb), позволяют передавать параметры, отделенные от оператора:
.execute (operation [, parameters])