У меня есть база данных class
вроде:
rlock = RLock()
class PostgresDB:
host = Settings.DB_HOST
name = Settings.DB_NAME
username = Settings.DB_USERNAME
pwd = Settings.DB_PWD
def __init__(self):
self.con = None
def _create_connection(self):
if self.con is None or self.con.closed:
self.con = psycopg2.connect("host={h} dbname={n} user={u} password={p}".format(
h=self.host, n=self.name, u=self.username, p=self.pwd,
cursor_factory=RealDictCursor))
@contextlib.contextmanager
def reading_cursor(self, sql, params=None):
rlock.acquire()
self._create_connection()
try:
cur = self.con.cursor()
cur.execute(sql, params)
yield cur
except DatabaseError as e:
traceback.print_exc()
yield Exception()
finally:
self.con.close()
rlock.release()
@contextlib.contextmanager
def writing_cursor(self, sql, params=None):
rlock.acquire()
self._create_connection()
try:
cur = self.con.cursor()
cur.execute(sql, params)
yield cur
self.con.commit()
except DatabaseError as e:
traceback.print_exc()
yield Exception()
finally:
self.con.close()
rlock.release()
Обратите внимание, что я явно запрашиваю RealDictCursor
.
Однако, когда любой запрос выполнен, результатом является список tuples
, а не dicts
. Я не уверен, что мне не хватает?