Caso você não tenha migrações de esquema, vou te dar um cenário prático:
Mantenha duas versões dos processos do django ( A e B ), que você controla com, digamos, supervisor. Mantenha um processo nginx na frente de seus processos django, que encaminha todas as requisições para A. Então, você carrega a versão B para o servidor, inicia o processo django B com supervisor, então muda o arquivo conf do seu nginx para apontar para B, então recarrega seu processo nginx..
No caso de você ter migrações de esquema, as coisas ficam complicadas. Suas opções incluem:
- Você pode considerar usar uma solução NoSQL, como mongoDB (neste caso, você pode manter uma única instância de banco de dados).
- Descubra como registrar manualmente todas as solicitações de gravação durante o upload, para enviá-las posteriormente ao seu novo banco de dados.