diff --git a/requirements.txt b/requirements.txt
index 6c231293e..f54aadaae 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -28,8 +28,8 @@ simplejson==3.*
 speaklater3==1.*
 sqlparse==0.*
 psutil==5.*
-psycopg2==2.9.*
-psycopg==3.1.0
+psycopg2==2.9.*; python_version < '3.7'
+psycopg==3.1.*; python_version >= '3.7'
 python-dateutil==2.*
 SQLAlchemy==1.4.*
 bcrypt==3.*
diff --git a/web/config.py b/web/config.py
index 16cc2e267..cf9d401bd 100644
--- a/web/config.py
+++ b/web/config.py
@@ -300,7 +300,10 @@ LOG_ROTATION_MAX_LOG_FILES = 90  # Maximum number of backups to retain
 ##########################################################################
 
 # The default driver used for making connection with PostgreSQL
-PG_DEFAULT_DRIVER = 'psycopg3'
+if sys.version_info < (3, 7):
+    PG_DEFAULT_DRIVER = 'psycopg2'
+else:
+    PG_DEFAULT_DRIVER = 'psycopg3'
 
 # Maximum allowed idle time in minutes before which releasing the connection
 # for the particular session. (in minutes)
diff --git a/web/pgadmin/browser/utils.py b/web/pgadmin/browser/utils.py
index d6727d371..43801f420 100644
--- a/web/pgadmin/browser/utils.py
+++ b/web/pgadmin/browser/utils.py
@@ -486,7 +486,6 @@ class PGChildNodeView(NodeView):
         dependencies = self.__fetch_dependency(
             conn, query, show_system_objects, is_schema_diff)
 
-        import psycopg
         # fetch role dependencies
         if where_clause.find('subid') < 0:
             sql = render_template(
diff --git a/web/pgadmin/tools/debugger/__init__.py b/web/pgadmin/tools/debugger/__init__.py
index 594a3ba1f..ebce9b5bf 100644
--- a/web/pgadmin/tools/debugger/__init__.py
+++ b/web/pgadmin/tools/debugger/__init__.py
@@ -36,6 +36,7 @@ from pgadmin.browser.server_groups.servers.databases.extensions.utils \
 from pgadmin.utils.constants import PREF_LABEL_KEYBOARD_SHORTCUTS, \
     SERVER_CONNECTION_CLOSED
 from pgadmin.preferences import preferences
+from pgadmin.utils.constants import PSYCOPG2
 
 MODULE_NAME = 'debugger'
 
@@ -1317,7 +1318,7 @@ def messages(trans_id):
 
     if conn.connected():
         status = 'Busy'
-        if PG_DEFAULT_DRIVER == 'psycopg2':
+        if PG_DEFAULT_DRIVER == PSYCOPG2:
             # psycopg3 doesn't require polling to get the
             # messages as debugger connection is already open
             # Remove this block while removing psucopg2 completely
diff --git a/web/pgadmin/tools/sqleditor/tests/test_download_csv_query_tool.py b/web/pgadmin/tools/sqleditor/tests/test_download_csv_query_tool.py
index ba1571a29..0283960a5 100644
--- a/web/pgadmin/tools/sqleditor/tests/test_download_csv_query_tool.py
+++ b/web/pgadmin/tools/sqleditor/tests/test_download_csv_query_tool.py
@@ -10,6 +10,7 @@
 from unittest.mock import patch
 
 from pgadmin.utils.route import BaseTestGenerator
+from pgadmin.utils.constants import PSYCOPG2
 from pgadmin.browser.server_groups.servers.databases.tests import utils as \
     database_utils
 from regression.python_test_utils import test_utils
@@ -18,6 +19,7 @@ from pgadmin.utils import server_utils
 import secrets
 import config
 
+
 class TestDownloadCSV(BaseTestGenerator):
     """
     This class validates download csv
@@ -151,7 +153,7 @@ class TestDownloadCSV(BaseTestGenerator):
         # Disable the console logging from Flask logger
         self.app.logger.disabled = True
         if not self.is_valid and self.is_valid_tx:
-            if config.PG_DEFAULT_DRIVER == 'psycopg2':
+            if config.PG_DEFAULT_DRIVER == PSYCOPG2:
                 # When user enters wrong query, poll will throw 500,
                 # so expecting 500, as poll is never called for a wrong query.
                 self.assertEqual(res.status_code, 500)
diff --git a/web/pgadmin/tools/sqleditor/tests/test_sql_ascii_encoding.py b/web/pgadmin/tools/sqleditor/tests/test_sql_ascii_encoding.py
index b8c84c956..25428d3df 100644
--- a/web/pgadmin/tools/sqleditor/tests/test_sql_ascii_encoding.py
+++ b/web/pgadmin/tools/sqleditor/tests/test_sql_ascii_encoding.py
@@ -10,6 +10,7 @@
 import secrets
 
 from pgadmin.utils.route import BaseTestGenerator
+from pgadmin.utils.constants import PSYCOPG3
 from regression.python_test_utils import test_utils
 from pgadmin.utils import server_utils
 import config
@@ -65,7 +66,8 @@ class TestSQLASCIIEncoding(BaseTestGenerator):
     ]
 
     def setUp(self):
-        if config.PG_DEFAULT_DRIVER == 'psycopg3':
+        print(config.PG_DEFAULT_DRIVER, PSYCOPG3)
+        if config.PG_DEFAULT_DRIVER == PSYCOPG3:
             self.skipTest('SQL_ASCII encoding: skipping for psycopg3.')
 
         self.encode_db_name = 'test_encoding_' + self.db_encoding + \
diff --git a/web/pgadmin/tools/sqleditor/tests/test_sql_ascii_encoding_psycopg3.py b/web/pgadmin/tools/sqleditor/tests/test_sql_ascii_encoding_psycopg3.py
index 641c4cbd8..ed49a8315 100644
--- a/web/pgadmin/tools/sqleditor/tests/test_sql_ascii_encoding_psycopg3.py
+++ b/web/pgadmin/tools/sqleditor/tests/test_sql_ascii_encoding_psycopg3.py
@@ -11,12 +11,14 @@ import secrets
 import json
 
 from pgadmin.utils.route import BaseTestGenerator
+from pgadmin.utils.constants import PSYCOPG2
 from regression.python_test_utils import test_utils
 from pgadmin.utils import server_utils
 from pgadmin.browser.server_groups.servers.databases.tests import utils as \
     database_utils
 import config
 
+
 class TestSQLASCIIEncodingPsycopg3(BaseTestGenerator):
     """
     This class validates character support in pgAdmin4 for
@@ -37,7 +39,8 @@ class TestSQLASCIIEncodingPsycopg3(BaseTestGenerator):
                 table_name='test_sql_ascii',
                 db_encoding='SQL_ASCII',
                 lc_collate='C',
-                test_str='\\test\Documents\2017\12\19\AD93E646-E5FE-11E7-85AE-EB2E217F96F0.tif'
+                test_str='\\test\Documents\2017\12\19\AD93E646-'
+                         'E5FE-11E7-85AE-EB2E217F96F0.tif'
             )),
         (
             'Test SQL_ASCII data with multiple forward slashes',
@@ -66,7 +69,7 @@ class TestSQLASCIIEncodingPsycopg3(BaseTestGenerator):
     ]
 
     def setUp(self):
-        if config.PG_DEFAULT_DRIVER == 'psycopg2':
+        if config.PG_DEFAULT_DRIVER == PSYCOPG2:
             self.skipTest('SQL_ASCII encoding: skipping for psycopg2.')
 
         self.encode_db_name = 'test_encoding_' + self.db_encoding + \
@@ -84,13 +87,6 @@ class TestSQLASCIIEncodingPsycopg3(BaseTestGenerator):
             self.server, self.encode_db_name,
             (self.db_encoding, self.lc_collate))
 
-        test_utils.create_table_with_query(
-            self.server,
-            self.encode_db_name,
-            """CREATE TABLE {0}(
-                name character varying(200) COLLATE pg_catalog."default")
-            """.format(self.table_name))
-
     def runTest(self):
         db_con = database_utils.connect_database(self,
                                                  test_utils.SERVER_GROUP,
@@ -117,7 +113,6 @@ class TestSQLASCIIEncodingPsycopg3(BaseTestGenerator):
         response = self.tester.get(url)
         self.assertEqual(response.status_code, 200)
         response_data = json.loads(response.data)
-        print(response_data)
         self.assertEqual(response_data['data']['rows_fetched_to'], 1)
         result = response_data['data']['result'][0][0]
         self.assertEqual(result, self.test_str)
diff --git a/web/pgadmin/tools/sqleditor/utils/tests/test_is_query_resultset_updatable.py b/web/pgadmin/tools/sqleditor/utils/tests/test_is_query_resultset_updatable.py
index 34a188b84..35a3f4382 100644
--- a/web/pgadmin/tools/sqleditor/utils/tests/test_is_query_resultset_updatable.py
+++ b/web/pgadmin/tools/sqleditor/utils/tests/test_is_query_resultset_updatable.py
@@ -162,7 +162,6 @@ class TestQueryUpdatableResultset(BaseTestGenerator):
 
     def _check_primary_keys(self, response_data):
         primary_keys = response_data['data']['primary_keys']
-        print(response_data['data'])
         self.assertEqual(primary_keys, self.expected_primary_keys)
 
     def _check_oids(self, response_data):
diff --git a/web/pgadmin/utils/constants.py b/web/pgadmin/utils/constants.py
index d32eff6a8..8ed4fe6bb 100644
--- a/web/pgadmin/utils/constants.py
+++ b/web/pgadmin/utils/constants.py
@@ -116,3 +116,7 @@ UTILITIES_ARRAY = ['pg_dump', 'pg_dumpall', 'pg_restore', 'psql']
 ENTER_EMAIL_ADDRESS = "Email address: "
 USER_NOT_FOUND = gettext("The specified user ID (%s) could not be found.")
 DATABASE_LAST_SYSTEM_OID = 16383
+
+# Drivers
+PSYCOPG2 = 'psycopg2'
+PSYCOPG3 = 'psycopg3'
diff --git a/web/pgadmin/utils/driver/psycopg3/connection.py b/web/pgadmin/utils/driver/psycopg3/connection.py
index e39179c37..02e453b6a 100644
--- a/web/pgadmin/utils/driver/psycopg3/connection.py
+++ b/web/pgadmin/utils/driver/psycopg3/connection.py
@@ -1485,9 +1485,8 @@ Failed to reset the connection to the server due to following error:
             if not self.conn.pgconn.is_busy():
                 if cur.description is not None:
                     for desc in cur.ordered_description():
-                        self.column_info = [
-                            desc.to_dict() for desc in cur.ordered_description()
-                        ]
+                        self.column_info = [desc.to_dict() for
+                                            desc in cur.ordered_description()]
 
                     pos = 0
                     for col in self.column_info:
diff --git a/web/pgadmin/utils/driver/psycopg3/encoding.py b/web/pgadmin/utils/driver/psycopg3/encoding.py
index 69ee92f93..3597a813b 100644
--- a/web/pgadmin/utils/driver/psycopg3/encoding.py
+++ b/web/pgadmin/utils/driver/psycopg3/encoding.py
@@ -39,8 +39,8 @@ def get_encoding(key):
                                                         'utf-8')
 
     _dict = encode_dict.get(postgres_encoding.upper(),
-                           [postgres_encoding,
-                            python_encoding])
+                            [postgres_encoding,
+                             python_encoding])
     return _dict
 
 
diff --git a/web/pgadmin/utils/driver/psycopg3/typecast.py b/web/pgadmin/utils/driver/psycopg3/typecast.py
index 499ca651f..0525fd231 100644
--- a/web/pgadmin/utils/driver/psycopg3/typecast.py
+++ b/web/pgadmin/utils/driver/psycopg3/typecast.py
@@ -173,6 +173,7 @@ def register_string_typecasters(connection):
             if connection:
                 connection.adapters.register_loader(typ, TextLoaderpgAdmin)
 
+
 def register_binary_typecasters(connection):
     # The new classes can be registered globally, on a connection, on a cursor
 
@@ -218,23 +219,23 @@ class pgAdminByteaLoader(Loader):
 
 class TextLoaderpgAdmin(TextLoader):
     def load(self, data):
-        postgres_encoding, python_encoding = \
-            get_encoding(self.connection.info.encoding)
-        if postgres_encoding != 'SQLASCII' and postgres_encoding != 'SQL_ASCII':
+        postgres_encoding, python_encoding = get_encoding(
+            self.connection.info.encoding)
+        if postgres_encoding not in ['SQLASCII', 'SQL_ASCII']:
             if isinstance(data, memoryview):
                 return bytes(data).decode(self._encoding)
             else:
                 return data.decode(self._encoding)
         else:
-            # SQL_ASCII db
+            # SQL_ASCII Database
             try:
                 if isinstance(data, memoryview):
                     return bytes(data).decode(python_encoding)
                 return data.decode(python_encoding)
             except Exception:
-                    if isinstance(data, memoryview):
-                        return bytes(data).decode('UTF-8')
-                    return data.decode('UTF-8')
+                if isinstance(data, memoryview):
+                    return bytes(data).decode('UTF-8')
+                return data.decode('UTF-8')
             else:
                 if isinstance(data, memoryview):
                     return bytes(data).decode('ascii', errors='replace')
diff --git a/web/pgadmin/utils/driver/registry.py b/web/pgadmin/utils/driver/registry.py
index 6ceaa58e8..61be6a6a2 100644
--- a/web/pgadmin/utils/driver/registry.py
+++ b/web/pgadmin/utils/driver/registry.py
@@ -9,17 +9,21 @@
 
 from abc import ABCMeta
 
+from pgadmin.utils.constants import PSYCOPG2
 from pgadmin.utils.dynamic_registry import create_registry_metaclass
+import config
 
 
 @classmethod
 def load_modules(cls, app=None):
     submodules = []
-    from . import psycopg2 as module
-    submodules.append(module)
 
-    from . import psycopg3 as module
-    submodules.append(module)
+    if config.PG_DEFAULT_DRIVER == PSYCOPG2:
+        from . import psycopg2 as module
+        submodules.append(module)
+    else:
+        from . import psycopg3 as module
+        submodules.append(module)
 
     from . import abstract as module
     submodules.append(module)
diff --git a/web/pgadmin/utils/route.py b/web/pgadmin/utils/route.py
index 8ca0cc443..d2e3ff2b7 100644
--- a/web/pgadmin/utils/route.py
+++ b/web/pgadmin/utils/route.py
@@ -14,11 +14,13 @@ from importlib import import_module
 
 from werkzeug.utils import find_modules
 from pgadmin.utils import server_utils
+from pgadmin.utils.constants import PSYCOPG2
 from .. import socketio
 
 import unittest
 import config
 
+
 class TestsGeneratorRegistry(ABCMeta):
     """
     class TestsGeneratorRegistry(object)
@@ -134,8 +136,9 @@ class BaseTestGenerator(unittest.TestCase, metaclass=TestsGeneratorRegistry):
                 server_con['data']['type'] in self.skip_on_database:
             self.skipTest('cannot run in: %s' % server_con['data']['type'])
         if hasattr(self, 'mock_data') and 'function_name' in self.mock_data:
-            self.mock_data['function_name'] = self.mock_data['function_name'
-            ].replace('psycopg3', config.PG_DEFAULT_DRIVER)
+            self.mock_data['function_name'] =\
+                self.mock_data['function_name'].replace(
+                    PSYCOPG3, config.PG_DEFAULT_DRIVER)
 
     def setTestServer(self, server):
         self.server = server
diff --git a/web/regression/python_test_utils/test_utils.py b/web/regression/python_test_utils/test_utils.py
index ff9e3201a..114433ffc 100644
--- a/web/regression/python_test_utils/test_utils.py
+++ b/web/regression/python_test_utils/test_utils.py
@@ -35,13 +35,13 @@ import regression
 from regression import test_setup
 
 from pgadmin.utils.preferences import Preferences
-from pgadmin.utils.constants import BINARY_PATHS
+from pgadmin.utils.constants import BINARY_PATHS, PSYCOPG3
 from pgadmin.utils import set_binary_path
 
 from functools import wraps
 
 # Remove this condition, once psycopg2 will be removed completely
-if config.PG_DEFAULT_DRIVER == 'psycopg3':
+if config.PG_DEFAULT_DRIVER == PSYCOPG3:
     import psycopg
 else:
     import psycopg2 as psycopg
