Тщательное о том, что execute
, нуждается второй аргумент, чтобы быть [справ] (список только с одним пункт). Что касается вашего вопроса, я обычно просто использую инкапсулирующее соединение и курсор, но похоже, что вы можете использовать контекст выполнения , метод __enter__
дает вам курсор, в то время как совершает или откатывает в зависимости от того, было ли окончание нормальным или путем исключения; это сделало бы код
def delete_session():
with get_cursor() as cur:
cur.execute(etc etc)
Если вам нравится этот стиль, дайте нам знать, и я покажу вам, как писать get_cursor
. Другие, несомненно, предложить декоратор вместо этого, так что вы бы написать:
@withcursor
def delete_session(cur):
cur.execute(etc etc)
, но я думаю, что это делает совершить/откат, среди других вопросов, немного мрачнее. Тем не менее, если это ваше предпочтение, дайте нам знать, и я также смогу показать вам, как написать эту форму.
Он отлично работает с одним только GUID. Есть ли проблема, о которой я не знаю? –
Я думаю, мне нравится подход к контекстному менеджеру. Ссылка, приведенная ars, описывает ее достаточно хорошо, но спасибо за предложение. –
@Ben, второй аргумент cursor.execute должен быть последовательностью значений (обычно кортежей), если вы используете замещение позиционного параметра (например, ваши% s или в других модулях API DB? Или: 1) или отображение (как правило, dict), если вы используете подменю named parameter (например: guid в некоторых модулях API DB) - не знаете, какой модуль DB API вы используете, но это довольно странно, позволяя вам уйти с другими формами, такими как один изолированный , non-mapping, non-mapping 2-й аргумент. –