ztlevi
8/13/2017 - 1:27 AM

context manager

context manager

from sqlite3 import connect
from contextlib import contextmanager

@contextmanager
def temptable(cur):
  cur.execute('create table points(x int, y int)')
  try:
    yield
  finally:
    cur.execute('drop table points')
    
with connect('test.db') as conn:
  cur = conn.cursor()
  with temptable(cur):
    cur.execute('insert into points (x, y) values(1,1)')
    cur.execute('insert into points (x, y) values(2,1)')
    cur.execute('insert into points (x, y) values(1,2)')
    for row in cur.execute('select x, y from points'):
      print(row)
    for row in cur.execute('select sum(x * y) from points'):
      print(row)
from sqlite3 import connect

class contextmanager:
  def __init__(self, gen):
    self.gen = gen
  def __call__(self, *args, **kwargs):
    self.args, self.kwargs = args, kwargs
    return self
  def __enter__(self):
    self.gen_inst = self.gen(*self.args, **self.kwargs)
    next(self.gen_inst)
  def __exit__(self, *args):
    next(self.gen_inst, None)
    
@contextmanager
def temptable(cur):
  cur.execute('create table points(x int, y int)')
  yield
  cur.execute('drop table points')

with connect('test.db') as conn:
  cur = conn.cursor()
  with temptable(cur):
    cur.execute('insert into points (x, y) values(1,1)')
    cur.execute('insert into points (x, y) values(2,1)')
    cur.execute('insert into points (x, y) values(1,2)')
    for row in cur.execute('select x, y from points'):
      print(row)
    for row in cur.execute('select sum(x * y) from points'):
      print(row)
from sqlite3 import connect

class temptable:
  def __init__(self, cur):
    self.cur = cur
  def __enter__(self):
    self.cur.execute('create table points(x int, y int)')
  def __exit__(self, *args):
    self.cur.execute('drop table points')
    
with connect('test.db') as conn:
  cur = conn.cursor()
  with temptable(cur):
    cur.execute('insert into points (x, y) values(1,1)')
    cur.execute('insert into points (x, y) values(2,1)')
    cur.execute('insert into points (x, y) values(1,2)')
    for row in cur.execute('select x, y from points'):
      print(row)
    for row in cur.execute('select sum(x * y) from points'):
      print(row)