diff --git a/Database/Persist/Class/PersistField.hs b/Database/Persist/Class/PersistField.hs
--- a/Database/Persist/Class/PersistField.hs
+++ b/Database/Persist/Class/PersistField.hs
@@ -162,6 +162,7 @@
   fromPersistValue (PersistText t) = case reads $ T.unpack t of --  NOTE: Sqlite can store rationals just as string
     [(a, "")] -> Right $ toRational (a :: Pico)
     _ -> Left $ "Can not read " <> t <> " as Rational (Pico in fact)"
+  fromPersistValue (PersistInt64 i) = Right $ fromIntegral i
   fromPersistValue x = Left $ "Expected Rational, received: " <> T.pack (show x)
 
 instance PersistField Bool where
diff --git a/Database/Persist/Class/PersistStore.hs b/Database/Persist/Class/PersistStore.hs
--- a/Database/Persist/Class/PersistStore.hs
+++ b/Database/Persist/Class/PersistStore.hs
@@ -34,6 +34,10 @@
 class MonadIO m => PersistStore m where
     type PersistMonadBackend m
 
+    -- | Get a record by identifier, if available.
+    get :: (PersistMonadBackend m ~ PersistEntityBackend val, PersistEntity val)
+        => Key val -> m (Maybe val)
+
     -- | Create a new record in the database, returning an automatically created
     -- key (in SQL an auto-increment id).
     insert :: (PersistMonadBackend m ~ PersistEntityBackend val, PersistEntity val)
@@ -44,6 +48,13 @@
             => val -> m ()
     insert_ val = insert val >> return ()
 
+    -- | Create multiple records in the database.
+    -- SQL backends currently use the slow default implementation of
+    -- @mapM insert@
+    insertMany :: (PersistMonadBackend m ~ PersistEntityBackend val, PersistEntity val)
+                => [val] -> m [Key val]
+    insertMany = mapM insert
+
     -- | Create a new record in the database using the given key.
     insertKey :: (PersistMonadBackend m ~ PersistEntityBackend val, PersistEntity val)
               => Key val -> val -> m ()
@@ -65,10 +76,6 @@
     -- not exist.
     delete :: (PersistMonadBackend m ~ PersistEntityBackend val, PersistEntity val)
            => Key val -> m ()
-
-    -- | Get a record by identifier, if available.
-    get :: (PersistMonadBackend m ~ PersistEntityBackend val, PersistEntity val)
-        => Key val -> m (Maybe val)
 
 #define DEF(T) { type PersistMonadBackend (T m) = PersistMonadBackend m; insert = lift . insert; insertKey k = lift . insertKey k; repsert k = lift . repsert k; replace k = lift . replace k; delete = lift . delete; get = lift . get }
 #define GO(T) instance (PersistStore m) => PersistStore (T m) where DEF(T)
diff --git a/Database/Persist/Sql/Orphan/PersistStore.hs b/Database/Persist/Sql/Orphan/PersistStore.hs
--- a/Database/Persist/Sql/Orphan/PersistStore.hs
+++ b/Database/Persist/Sql/Orphan/PersistStore.hs
@@ -58,9 +58,10 @@
     insertKey = insrepHelper "INSERT"
 
     repsert key value = do
-        -- FIXME use this for sqlite insrepHelper "REPLACE"
-        delete key
-        insertKey key value
+        mExisting <- get key
+        case mExisting of
+          Nothing -> insertKey key value
+          Just _ -> replace key value
 
     get k = do
         conn <- askSqlConn
diff --git a/persistent.cabal b/persistent.cabal
--- a/persistent.cabal
+++ b/persistent.cabal
@@ -1,5 +1,5 @@
 name:            persistent
-version:         1.2.0.2
+version:         1.2.1
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
