diff --git a/Lib/sqlite3/test/userfunctions.py b/Lib/sqlite3/test/userfunctions.py
index 8bfc591..e01341e 100644
--- a/Lib/sqlite3/test/userfunctions.py
+++ b/Lib/sqlite3/test/userfunctions.py
@@ -37,6 +37,8 @@
     return None
 def func_returnblob():
     return b"blob"
+def func_returnlonglong():
+    return 1<<31
 def func_raiseexception():
     5/0
 
@@ -50,6 +52,8 @@
     return type(v) is type(None)
 def func_isblob(v):
     return isinstance(v, (bytes, memoryview))
+def func_islonglong(v):
+    return isinstance(v, int) and v >= 1<<31
 
 class AggrNoStep:
     def __init__(self):
@@ -127,6 +131,7 @@
         self.con.create_function("returnfloat", 0, func_returnfloat)
         self.con.create_function("returnnull", 0, func_returnnull)
         self.con.create_function("returnblob", 0, func_returnblob)
+        self.con.create_function("returnlonglong", 0, func_returnlonglong)
         self.con.create_function("raiseexception", 0, func_raiseexception)
 
         self.con.create_function("isstring", 1, func_isstring)
@@ -134,6 +139,7 @@
         self.con.create_function("isfloat", 1, func_isfloat)
         self.con.create_function("isnone", 1, func_isnone)
         self.con.create_function("isblob", 1, func_isblob)
+        self.con.create_function("islonglong", 1, func_islonglong)
 
     def tearDown(self):
         self.con.close()
@@ -200,6 +206,12 @@
         self.assertEqual(type(val), bytes)
         self.assertEqual(val, b"blob")
 
+    def CheckFuncReturnLongLong(self):
+        cur = self.con.cursor()
+        cur.execute("select returnlonglong()")
+        val = cur.fetchone()[0]
+        self.assertEqual(val, 1<<31)
+
     def CheckFuncException(self):
         cur = self.con.cursor()
         try:
@@ -239,6 +251,12 @@
         val = cur.fetchone()[0]
         self.assertEqual(val, 1)
 
+    def CheckParamLongLong(self):
+        cur = self.con.cursor()
+        cur.execute("select islonglong(?)", (1<<42,))
+        val = cur.fetchone()[0]
+        self.assertEqual(val, 1)
+
 class AggregateTests(unittest.TestCase):
     def setUp(self):
         self.con = sqlite.connect(":memory:")
diff --git a/Misc/ACKS b/Misc/ACKS
index ad276e8..36d7e84 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -222,6 +222,7 @@
 Erik Demaine
 John Dennis
 Roger Dev
+Philippe Devalkeneer
 Raghuram Devarakonda
 Caleb Deveraux
 Catherine Devlin
diff --git a/Misc/NEWS b/Misc/NEWS
index 4574455..5d2b178 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -121,6 +121,9 @@
 Library
 -------
 
+- Issue #8033: sqlite3: Fix 64-bit integer handling in user functions
+  on 32-bit architectures. Initial patch by Philippe Devalkeneer.
+
 - HTMLParser is now able to handle slashes in the start tag.
 
 - Issue #14001: CVE-2012-0845: xmlrpc: Fix an endless loop in
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index 7d12d5e..9d4c72f 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -484,7 +484,6 @@
 
 void _pysqlite_set_result(sqlite3_context* context, PyObject* py_val)
 {
-    long longval;
     const char* buffer;
     Py_ssize_t buflen;
 
@@ -493,8 +492,7 @@
     } else if (py_val == Py_None) {
         sqlite3_result_null(context);
     } else if (PyLong_Check(py_val)) {
-        longval = PyLong_AsLong(py_val);
-        sqlite3_result_int64(context, (PY_LONG_LONG)longval);
+        sqlite3_result_int64(context, PyLong_AsLongLong(py_val));
     } else if (PyFloat_Check(py_val)) {
         sqlite3_result_double(context, PyFloat_AsDouble(py_val));
     } else if (PyUnicode_Check(py_val)) {
@@ -519,7 +517,6 @@
     sqlite3_value* cur_value;
     PyObject* cur_py_value;
     const char* val_str;
-    PY_LONG_LONG val_int;
     Py_ssize_t buflen;
 
     args = PyTuple_New(argc);
@@ -531,8 +528,7 @@
         cur_value = argv[i];
         switch (sqlite3_value_type(argv[i])) {
             case SQLITE_INTEGER:
-                val_int = sqlite3_value_int64(cur_value);
-                cur_py_value = PyLong_FromLong((long)val_int);
+                cur_py_value = PyLong_FromLongLong(sqlite3_value_int64(cur_value));
                 break;
             case SQLITE_FLOAT:
                 cur_py_value = PyFloat_FromDouble(sqlite3_value_double(cur_value));
