Есть ли способ "с conn.cursor () как ..." работать с Sqlite? - PullRequest
0 голосов
/ 25 ноября 2018

Вместо использования:

import sqlite3
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute(...)
c.close()

возможно ли использовать Pythonic идиома:

with conn.cursor() as c:
    c.execute(...)

Не похоже, что она работает:

AttributeError: __exit__

Примечание: важно закрыть курсор из-за this .

1 Ответ

0 голосов
/ 25 ноября 2018

Более простой альтернативой будет использование объекта соединения с менеджером контекста, как указано в docs .

with con:
    con.execute(...)

Если вы настаиваете на работе с курсором(по причинам), тогда почему бы не создать свой собственный класс-обертку?

class SafeCursor:
    def __init__(self, connection):
        self.con = connection

    def __enter__(self):
        self.cursor = self.con.cursor()
        return self.cursor

    def __exit__(self, typ, value, traceback):
        self.cursor.close()

Затем вы будете называть свой класс следующим образом:

with SafeCursor(conn) as c:
    c.execute(...)
...