Генерируйте SQL-операторы с Python [дубликат]

Вы можете:

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();

дополнительное сохраненное распространение в прямом и обратном направлениях стоит того:)

10
задан Jeffrey04 14 October 2009 в 04:32
поделиться

4 ответа

SQLAlchemy предоставляет ] надежный язык выражений для генерации SQL из Python.

Однако, как и любой другой хорошо спроектированный уровень абстракции, запросы, которые он генерирует, вставляют данные через переменные связывания, а не путем попытки смешивания языка запросов и данных вставлен в одну строку. Такой подход позволяет избежать серьезных уязвимостей в системе безопасности и в остальном является правильным.

10
ответ дан 3 December 2019 в 14:18
поделиться

python db api 2.0 имеет метод «.execute» для объектов подключения. Вы можете указать параметры (используйте запятую НЕ знак% для отделения параметров от строки запроса) с помощью этой функции.

1
ответ дан 3 December 2019 в 14:18
поделиться

Для надежности я рекомендую использовать подготовленные операторы для отправки значений, введенных пользователем, независимо от того, какой язык вы используете. : -)

2
ответ дан 3 December 2019 в 14:18
поделиться

В общем случае указывать параметры вручную - плохая идея. Что делать, если при обходе правил допущена ошибка? Что делать, если escape не соответствует используемой версии БД? Что, если вы просто забыли экранировать какой-либо параметр или ошибочно предположили, что он не может содержать данные, требующие экранирования? Все это может вызвать уязвимость SQL-инъекций. Кроме того, БД может иметь некоторые ограничения на длину оператора SQL, в то время как вам нужно передать большой фрагмент данных для столбца LOB. Вот почему Python DB API и большинство баз данных (модуль Python DB API будет прозрачно экранировать параметры, если база данных не поддерживает это, как это делала ранняя MySQLdb), позволяют передавать параметры, отделенные от оператора:

.execute (operation [, parameters])

1
ответ дан 3 December 2019 в 14:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: