diff --git a/sijapi/database.py b/sijapi/database.py
index 0b1b67d..8e4b491 100644
--- a/sijapi/database.py
+++ b/sijapi/database.py
@@ -270,16 +270,26 @@ class Database:
             for query in unexecuted_queries:
                 try:
                     params = json.loads(query.args)
-                    await session.execute(text(query.query), params)
-                    query.completed_by = list(set(query.completed_by + [self.local_ts_id]))
-                    await session.commit()
+                    
+                    # Convert string datetime to datetime objects
+                    for key, value in params.items():
+                        if isinstance(value, str) and value.endswith(('Z', '+00:00')):
+                            try:
+                                params[key] = datetime.fromisoformat(value.rstrip('Z'))
+                            except ValueError:
+                                # If conversion fails, leave the original value
+                                pass
+
+                    async with session.begin():
+                        await session.execute(text(query.query), params)
+                        query.completed_by = list(set(query.completed_by + [self.local_ts_id]))
+                        await session.commit()
                     l.info(f"Successfully executed query ID {query.id}")
                 except Exception as e:
                     l.error(f"Failed to execute query ID {query.id}: {str(e)}")
                     await session.rollback()
             l.info("Finished executing unexecuted queries")
 
-
     async def call_db_sync_on_servers(self):
         """Call /db/sync on all online servers."""
         online_servers = await self.get_online_servers()