Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.58 KB | None | 0 0
  1. # use execute like:
  2. for row in execute(conn, 'SELECT n FROM foo WHERE n = %(n)s', n=9):
  3.     print(row['n'])
  4.  
  5.  
  6. def yielder(cur):
  7.     cols = [col.name for col in cur.description or []]
  8.     while True:
  9.         row = cur.fetchone()
  10.         if row is not None:
  11.             yield dict(zip(cols, row))
  12.         else:
  13.             break
  14.     cur.close()
  15.  
  16.  
  17. def execute(conn, sql, **kwargs):
  18.     cur = conn.cursor()
  19.     cur.execute(sql, kwargs)
  20.     return yielder(cur)
  21.  
  22.  
  23. def named(s: str):
  24.     return f'%({s})s'
  25.  
  26.  
  27. def execute_values(conn, sql, values, columns, **kwargs):
  28.     cur = conn.cursor()
  29.     template = f'({",".join(named(c) for c in columns)})'
  30.     value_strs = ','.join(
  31.         cur.mogrify(template, value).decode('utf-8') for value in values)
  32.     if value_strs:
  33.         cur.execute(sql.format(values=value_strs), **kwargs)
  34.         return yielder(cur)
  35.     else:
  36.         cur.close()
  37.         return iter([])
  38.  
  39. # and the pytest fixtures
  40.  
  41. @pytest.fixture(scope='session')
  42. def original_conn():
  43.     with testing.postgresql.Postgresql(port=8421) as postgresql:
  44.         print(f'connecting to: {postgresql.url()}')
  45.         conn_ = psycopg2.connect(postgresql.url())
  46.         yield conn_
  47.         conn_.close()
  48.  
  49.  
  50. @pytest.fixture()
  51. def conn(original_conn):
  52.     with original_conn:
  53.         db.execute(original_conn, db.create_tables_sql)
  54.  
  55.     yield original_conn
  56.  
  57.     drop_schema = 'DROP SCHEMA public CASCADE'
  58.     create_schema = 'CREATE SCHEMA public'
  59.     with original_conn:
  60.         db.execute(original_conn, drop_schema)
  61.         db.execute(original_conn, create_schema)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement