1 | # Custom DB backend postgresql_psycopg2 based
|
---|
2 | # implements persistent database connection using global variable
|
---|
3 |
|
---|
4 | from django.db.backends.postgresql_psycopg2.base import DatabaseError, DatabaseWrapper as BaseDatabaseWrapper, \
|
---|
5 | IntegrityError
|
---|
6 | from psycopg2 import OperationalError
|
---|
7 |
|
---|
8 | connection = None
|
---|
9 |
|
---|
10 | class DatabaseWrapper(BaseDatabaseWrapper):
|
---|
11 | def _cursor(self, *args, **kwargs):
|
---|
12 | global connection
|
---|
13 | if connection is not None and self.connection is None:
|
---|
14 | try: # Check if connection is alive
|
---|
15 | connection.cursor().execute('SELECT 1')
|
---|
16 | except OperationalError: # The connection is not working, need reconnect
|
---|
17 | connection = None
|
---|
18 | else:
|
---|
19 | self.connection = connection
|
---|
20 | cursor = super(DatabaseWrapper, self)._cursor(*args, **kwargs)
|
---|
21 | if connection is None and self.connection is not None:
|
---|
22 | connection = self.connection
|
---|
23 | return cursor
|
---|
24 |
|
---|
25 | def close(self):
|
---|
26 | if self.connection is not None:
|
---|
27 | self.connection.commit()
|
---|
28 | self.connection = None
|
---|