Index: django/db/backends/sqlite3/base.py
===================================================================
--- django/db/backends/sqlite3/base.py	(revision 10197)
+++ django/db/backends/sqlite3/base.py	(working copy)
@@ -13,6 +13,7 @@
 from django.db.backends.sqlite3.creation import DatabaseCreation
 from django.db.backends.sqlite3.introspection import DatabaseIntrospection
 from django.utils.safestring import SafeString
+from django.utils.encoding import force_unicode
 
 try:
     try:
@@ -190,12 +191,14 @@
     """
     def execute(self, query, params=()):
         query = self.convert_query(query, len(params))
-        return Database.Cursor.execute(self, query, params)
+        return Database.Cursor.execute(self, query, 
+                                       [self.convert_param(p) for p in params])
 
     def executemany(self, query, param_list):
         try:
           query = self.convert_query(query, len(param_list[0]))
-          return Database.Cursor.executemany(self, query, param_list)
+          return Database.Cursor.executemany(self, query, 
+                                             [[self.convert_param(p) for p in params] for params in param_list])
         except (IndexError,TypeError):
           # No parameter list provided
           return None
@@ -203,6 +206,13 @@
     def convert_query(self, query, num_params):
         return query % tuple("?" * num_params)
 
+    def convert_param(self, param):
+        # These are the types that sqlite3 can handle directly
+        if param is None or isinstance(param, (int,long,float,str,unicode,buffer,bool)):
+            return param
+        # The rest we must convert to unicode first
+        return force_unicode(param)
+
 def _sqlite_extract(lookup_type, dt):
     if dt is None:
         return None
Index: tests/regressiontests/backends/models.py
===================================================================
--- tests/regressiontests/backends/models.py	(revision 10197)
+++ tests/regressiontests/backends/models.py	(working copy)
@@ -15,6 +15,13 @@
     def __unicode__(self):
         return u'%s %s' % (self.first_name, self.last_name)
 
+class Adaptor(object):
+    def __init__(self, value):
+        self.value = value
+
+    def __str__(self):
+        return self.value
+
 qn = connection.ops.quote_name
 
 __test__ = {'API_TESTS': """
@@ -56,4 +63,10 @@
 >>> list(cursor.fetchall())
 [(u'Mary', u'Agnelline'), (u'Peter', u'Parker')]
 
+#9633: Using adaptor objects as query parameters with sqlite3
+>>> query = 'SELECT %s'
+>>> param = Adaptor(u'Arthur')
+>>> foo = cursor.execute(query, (param,))
+>>> cursor.fetchone()
+(u'Arthur',)
 """}
