]>
git.saurik.com Git - cyql.git/blob - __init__.py
36548c263c6f984c71226f6d4a79f3c3ed3ffd17
1 #from __future__ import unicode_literals
2 #from __future__ import print_function
7 from contextlib
import contextmanager
12 from psycopg2
.extras
import DictCursor
14 psycopg2
.extensions
.register_type(psycopg2
.extensions
.UNICODE
)
17 return sql
.cursor(cursor_factory
=DictCursor
)
19 class Transaction(object):
20 def __init__(self
, connection
):
21 self
.connection
= connection
23 def pull(self
, statement
):
24 locals = inspect
.currentframe(1).f_locals
25 cursor
= Cursor(self
.connection
)
28 cursor
.execute(statement
.format(**locals), locals)
29 return cursor
.fetchall()
33 def yank(self
, statement
):
34 locals = inspect
.currentframe(1).f_locals
35 cursor
= Cursor(self
.connection
)
38 cursor
.execute(statement
.format(**locals), locals)
39 rows
= cursor
.fetchall()
40 return rows
[0] if len(rows
) != 0 else None
44 def push(self
, statement
):
45 locals = inspect
.currentframe(1).f_locals
46 cursor
= Cursor(self
.connection
)
49 cursor
.execute(statement
.format(**locals), locals)
58 sql
= psycopg2
.connect(**dsn
)
60 except psycopg2
.OperationalError
, e
:
66 sql
.set_client_encoding('UNICODE')
71 yield Transaction(sql
)
81 def slap_(sql
, table
, keys
, values
, path
):
84 csr
.execute('savepoint iou')
86 both
= dict(keys
, **values
)
90 insert into %s (%s) values (%s)
94 ', '.join(['%s' for key
in fields
])
96 except psycopg2
.IntegrityError
, e
:
97 csr
.execute('rollback to savepoint iou')
100 update %s set %s where %s
105 for key
in values
.keys()]),
108 for key
in keys
.keys()])
109 ), values
.values() + keys
.values())
111 return path_(csr
, path
)