diff --git a/rocksdb/_rocksdb.pyx b/rocksdb/_rocksdb.pyx
index ca31ec8ab4ee9307b7eae90a5d436d007d241ff6..4c233283b3819792ff348f24e2faea7eeeaacd3c 100644
--- a/rocksdb/_rocksdb.pyx
+++ b/rocksdb/_rocksdb.pyx
@@ -725,6 +725,12 @@ cdef class CompressionType(object):
     zstdnotfinal_compression = u'zstdnotfinal_compression'
     disable_compression = u'disable_compression'
 
+cdef class CompactionPri(object):
+    by_compensated_size = u'by_compensated_size'
+    oldest_largest_seq_first = u'oldest_largest_seq_first'
+    oldest_smallest_seq_first = u'oldest_smallest_seq_first'
+    min_overlapping_ratio = u'min_overlapping_ratio'
+
 cdef class Options(object):
     cdef options.Options* opts
     cdef PyComparator py_comparator
@@ -829,6 +835,27 @@ cdef class Options(object):
             if 'max_dict_bytes' in value:
                 copts.max_dict_bytes = value['max_dict_bytes']
 
+    property compaction_pri:
+        def __get__(self):
+            if self.opts.compaction_pri == options.kByCompensatedSize:
+                return CompactionPri.by_compensated_size
+            if self.opts.compaction_pri == options.kOldestLargestSeqFirst:
+                return CompactionPri.oldest_largest_seq_first
+            if self.opts.compaction_pri == options.kOldestSmallestSeqFirst:
+                return CompactionPri.oldest_smallest_seq_first
+            if self.opts.compaction_pri == options.kMinOverlappingRatio:
+                return CompactionPri.min_overlapping_ratio
+        def __set__(self, value):
+            if value == CompactionPri.by_compensated_size:
+                self.opts.compaction_pri = options.kByCompensatedSize
+            elif value == CompactionPri.oldest_largest_seq_first:
+                self.opts.compaction_pri = options.kOldestLargestSeqFirst
+            elif value == CompactionPri.oldest_smallest_seq_first:
+                self.opts.compaction_pri = options.kOldestSmallestSeqFirst
+            elif value == CompactionPri.min_overlapping_ratio:
+                self.opts.compaction_pri = options.kMinOverlappingRatio
+            else:
+                raise TypeError("Unknown compaction pri: %s" % value)
 
 
     property compression:
diff --git a/rocksdb/tests/test_options.py b/rocksdb/tests/test_options.py
index ec2db4c67c3ad31673ebf5db4e69145c2973bc0a..fc9ec9471daccec0b52916b51cf2468b85e96e69 100644
--- a/rocksdb/tests/test_options.py
+++ b/rocksdb/tests/test_options.py
@@ -35,6 +35,17 @@ class TestOptions(unittest.TestCase):
         with self.assertRaises(TypeError):
             opts.merge_operator = "not an operator"
 
+    def test_compaction_pri(self):
+        opts = rocksdb.Options()
+        # default compaction_pri 
+        self.assertEqual(opts.compaction_pri, rocksdb.CompactionPri.by_compensated_size)
+        opts.compaction_pri = rocksdb.CompactionPri.by_compensated_size
+        self.assertEqual(opts.compaction_pri, rocksdb.CompactionPri.by_compensated_size)
+        opts.compaction_pri = rocksdb.CompactionPri.oldest_largest_seq_first
+        self.assertEqual(opts.compaction_pri, rocksdb.CompactionPri.oldest_largest_seq_first)
+        opts.compaction_pri = rocksdb.CompactionPri.min_overlapping_ratio
+        self.assertEqual(opts.compaction_pri, rocksdb.CompactionPri.min_overlapping_ratio)
+
     def test_compression_opts(self):
         opts = rocksdb.Options()
         compression_opts = opts.compression_opts