Index: django/db/backends/util.py
===================================================================
--- django/db/backends/util.py	(revision 9791)
+++ django/db/backends/util.py	(working copy)
@@ -45,6 +45,44 @@
     def __iter__(self):
         return iter(self.cursor)
 
+class CursorInteractiveWrapper(object):
+    def __init__(self, cursor, db):
+        self.cursor = cursor
+        self.db = db # Instance of a BaseDatabaseWrapper subclass
+
+    def _confirm(self, sql, params):
+        """Ask the user whether to execute this SQL"""
+        if sql and not sql.lower().startswith("select") and not sql.lower().startswith("show"):
+            print sql
+            if params:
+                print "PARAMS:", params
+            answer = raw_input("Execute this [y/N]?")
+            print '-'*20
+            if not answer or answer.lower() != 'y':
+                return False
+        return True
+
+    def execute(self, sql, params=()):
+        if self._confirm(sql, params):
+            return self.cursor.execute(sql, params)
+        else:
+            return None
+
+    def executemany(self, sql, param_list):
+        if self._confirm(sql, param_list):
+            return self.cursor.executemany(sql, param_list)
+        else:
+            return None
+
+    def __getattr__(self, attr):
+        if attr in self.__dict__:
+            return self.__dict__[attr]
+        else:
+            return getattr(self.cursor, attr)
+
+    def __iter__(self):
+        return iter(self.cursor)
+
 ###############################################
 # Converters from database (string) to Python #
 ###############################################
Index: django/db/backends/__init__.py
===================================================================
--- django/db/backends/__init__.py	(revision 9791)
+++ django/db/backends/__init__.py	(working copy)
@@ -28,7 +28,8 @@
         self.connection = None
         self.queries = []
         self.options = kwargs
-
+        self.is_interactive = False
+        
     def _commit(self):
         if self.connection is not None:
             return self.connection.commit()
@@ -58,15 +59,20 @@
             self.connection = None
 
     def cursor(self):
-        from django.conf import settings
+        from django.conf import settings        
         cursor = self._cursor(settings)
         if settings.DEBUG:
-            return self.make_debug_cursor(cursor)
+            cursor = self.make_debug_cursor(cursor)
+        if self.is_interactive:
+            cursor = self.make_interactive_cursor(cursor)
         return cursor
 
     def make_debug_cursor(self, cursor):
         return util.CursorDebugWrapper(cursor, self)
 
+    def make_interactive_cursor(self, cursor):
+        return util.CursorInteractiveWrapper(cursor, self)
+
 class BaseDatabaseFeatures(object):
     allows_group_by_pk = False
     # True if django.db.backend.utils.typecast_timestamp is used on values
Index: django/core/management/commands/syncdb.py
===================================================================
--- django/core/management/commands/syncdb.py	(revision 9791)
+++ django/core/management/commands/syncdb.py	(working copy)
@@ -12,6 +12,8 @@
     option_list = NoArgsCommand.option_list + (
         make_option('--noinput', action='store_false', dest='interactive', default=True,
             help='Tells Django to NOT prompt the user for input of any kind.'),
+        make_option('--prompt', action='store_true', dest='prompt', default=False,
+            help='Show each SQL statement before executing, and prompt whether to run it')
     )
     help = "Create the database tables for all apps in INSTALLED_APPS whose tables haven't already been created."
 
@@ -23,6 +25,7 @@
         verbosity = int(options.get('verbosity', 1))
         interactive = options.get('interactive')
         show_traceback = options.get('traceback', False)
+        connection.is_interactive = options.get('prompt', False)
 
         self.style = no_style()
 
Index: docs/ref/django-admin.txt
===================================================================
--- docs/ref/django-admin.txt	(revision 9791)
+++ docs/ref/django-admin.txt	(working copy)
@@ -665,6 +665,20 @@
 "Are you sure?" confirmation messages. This is useful if ``django-admin.py``
 is being executed as an unattended, automated script.
 
+--prompt
+~~~~~~~~
+.. versionadded:: 1.1
+
+Use the ``--prompt`` option to be prompted before each line of SQL that changes data
+gets executed (i.e. you won't get prompted for SELECT statement). The SQL will be displayed along
+with a yes or no prompt, and if you say no that line of SQL will not get executed.
+
+Note that some of the SQL will depend on previous statements having been executed. For example,
+if you say no to the SQL to create a table, then yes to the SQL to insert into it, 
+you're on your own.
+
+If you say both ``--noinput`` and ``--prompt``, you wil get prompted. Don't use both.
+
 test
 ----
 
