Index: django/db/backends/ado_mssql/base.py
===================================================================
--- django/db/backends/ado_mssql/base.py	(revision 6888)
+++ django/db/backends/ado_mssql/base.py	(working copy)
@@ -5,6 +5,8 @@
 """
 
 from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, BaseDatabaseOperations, util
+from django.dispatch import dispatcher
+from django.db.backends import signals
 try:
     import adodbapi as Database
 except ImportError, e:
@@ -109,4 +111,5 @@
             # TODO: Handle DATABASE_PORT.
             conn_string = "PROVIDER=SQLOLEDB;DATA SOURCE=%s;UID=%s;PWD=%s;DATABASE=%s" % (settings.DATABASE_HOST, settings.DATABASE_USER, settings.DATABASE_PASSWORD, settings.DATABASE_NAME)
             self.connection = Database.connect(conn_string)
+        dispatcher.send(signal=signals.connection_created, sender=self.__class__)
         return self.connection.cursor()
Index: django/db/backends/mysql_old/base.py
===================================================================
--- django/db/backends/mysql_old/base.py	(revision 6888)
+++ django/db/backends/mysql_old/base.py	(working copy)
@@ -5,6 +5,8 @@
 """
 
 from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, BaseDatabaseOperations, util
+from django.dispatch import dispatcher
+from django.db.backends import signals
 from django.utils.encoding import force_unicode
 try:
     import MySQLdb as Database
@@ -194,6 +196,7 @@
                     self.connection.set_character_set('utf8')
         else:
             cursor = self.connection.cursor()
+        dispatcher.send(signal=signals.connection_created, sender=self.__class__)
         return cursor
 
     def make_debug_cursor(self, cursor):
Index: django/db/backends/postgresql/base.py
===================================================================
--- django/db/backends/postgresql/base.py	(revision 6888)
+++ django/db/backends/postgresql/base.py	(working copy)
@@ -6,6 +6,8 @@
 
 from django.utils.encoding import smart_str, smart_unicode
 from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, util
+from django.dispatch import dispatcher
+from django.db.backends import signals
 from django.db.backends.postgresql.operations import DatabaseOperations
 try:
     import psycopg as Database
@@ -102,6 +104,7 @@
             cursor.execute("SET TIME ZONE %s", [settings.TIME_ZONE])
         cursor.execute("SET client_encoding to 'UNICODE'")
         cursor = UnicodeCursorWrapper(cursor, 'utf-8')
+        dispatcher.send(signal=signals.connection_created, sender=self.__class__)
         return cursor
 
 def typecast_string(s):
Index: django/db/backends/sqlite3/base.py
===================================================================
--- django/db/backends/sqlite3/base.py	(revision 6888)
+++ django/db/backends/sqlite3/base.py	(working copy)
@@ -7,6 +7,8 @@
 """
 
 from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, BaseDatabaseOperations, util
+from django.dispatch import dispatcher
+from django.db.backends import signals
 try:
     try:
         from sqlite3 import dbapi2 as Database
@@ -112,6 +114,7 @@
             self.connection.create_function("django_extract", 2, _sqlite_extract)
             self.connection.create_function("django_date_trunc", 2, _sqlite_date_trunc)
             self.connection.create_function("regexp", 2, _sqlite_regexp)
+        dispatcher.send(signal=signals.connection_created, sender=self.__class__)
         return self.connection.cursor(factory=SQLiteCursorWrapper)
 
     def close(self):
Index: django/db/backends/mysql/base.py
===================================================================
--- django/db/backends/mysql/base.py	(revision 6888)
+++ django/db/backends/mysql/base.py	(working copy)
@@ -5,6 +5,8 @@
 """
 
 from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, BaseDatabaseOperations, util
+from django.dispatch import dispatcher
+from django.db.backends import signals
 try:
     import MySQLdb as Database
 except ImportError, e:
@@ -180,6 +182,7 @@
                 kwargs['port'] = int(settings.DATABASE_PORT)
             kwargs.update(self.options)
             self.connection = Database.connect(**kwargs)
+        dispatcher.send(signal=signals.connection_created, sender=self.__class__)
         cursor = self.connection.cursor()
         return cursor
 
Index: django/db/backends/oracle/base.py
===================================================================
--- django/db/backends/oracle/base.py	(revision 6888)
+++ django/db/backends/oracle/base.py	(working copy)
@@ -5,6 +5,8 @@
 """
 
 from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, BaseDatabaseOperations, util
+from django.dispatch import dispatcher
+from django.db.backends import signals
 from django.utils.datastructures import SortedDict
 from django.utils.encoding import smart_str, force_unicode
 import datetime
@@ -432,6 +434,7 @@
         # Set oracle date to ansi date format.
         cursor.execute("ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD'")
         cursor.execute("ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF'")
+        dispatcher.send(signal=signals.connection_created, sender=self.__class__)
         return cursor
 
 class FormatStylePlaceholderCursor(Database.Cursor):
Index: django/db/backends/signals.py
===================================================================
--- django/db/backends/signals.py	(revision 0)
+++ django/db/backends/signals.py	(revision 0)
@@ -0,0 +1 @@
+connection_created = object()
\ No newline at end of file
Index: django/db/backends/postgresql_psycopg2/base.py
===================================================================
--- django/db/backends/postgresql_psycopg2/base.py	(revision 6888)
+++ django/db/backends/postgresql_psycopg2/base.py	(working copy)
@@ -6,6 +6,8 @@
 
 from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures
 from django.db.backends.postgresql.operations import DatabaseOperations as PostgresqlDatabaseOperations
+from django.dispatch import dispatcher
+from django.db.backends import signals
 from django.utils.safestring import SafeUnicode
 try:
     import psycopg2 as Database
@@ -73,4 +75,5 @@
         cursor.tzinfo_factory = None
         if set_tz:
             cursor.execute("SET TIME ZONE %s", [settings.TIME_ZONE])
+        dispatcher.send(signal=signals.connection_created, sender=self.__class__)
         return cursor
Index: tests/modeltests/signals/models.py
===================================================================
--- tests/modeltests/signals/models.py	(revision 6888)
+++ tests/modeltests/signals/models.py	(working copy)
@@ -2,8 +2,10 @@
 Testing signals before/after saving and deleting.
 """
 
+from django.dispatch import dispatcher
 from django.db import models
-from django.dispatch import dispatcher
+from django.db import connection
+from django.db.backends.signals import connection_created
 
 class Person(models.Model):
     first_name = models.CharField(max_length=20)
@@ -32,12 +34,22 @@
     print 'post_delete signal,', instance
     print 'instance.id is None: %s' % (instance.id == None)  
 
+def connection_created_test(sender, **kwargs):
+    print 'connection_created signal'
+
 __test__ = {'API_TESTS':"""
+>>> dispatcher.connect(connection_created_test, signal=connection_created)
 >>> dispatcher.connect(pre_save_test, signal=models.signals.pre_save)
 >>> dispatcher.connect(post_save_test, signal=models.signals.post_save)
 >>> dispatcher.connect(pre_delete_test, signal=models.signals.pre_delete)
 >>> dispatcher.connect(post_delete_test, signal=models.signals.post_delete)
 
+>>> cursor = connection.cursor()
+connection_created signal
+
+>>> dispatcher.disconnect(connection_created_test, signal=connection_created)
+>>> cursor = connection.cursor()
+
 >>> p1 = Person(first_name='John', last_name='Smith')
 >>> p1.save()
 pre_save signal, John Smith
