Skip to content

Commit 3516b53

Browse files
Initial post JacksonOsvaldo
1 parent d336cf7 commit 3516b53

File tree

2,062 files changed

+408102
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,062 files changed

+408102
-0
lines changed
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
Title: Fazendo backup do banco de dados no Django
2+
Date: 2020-10-27 22:19
3+
Tags: Python,Django,backup
4+
Category: Python
5+
Slug: fazendo-backup-do-banco-de-dados-no-django
6+
Author: Jackson Osvaldo
7+
8+
Github: JacksonOsvaldo
9+
About_author: Um curioso apaixonado por livros, tecnologia e programação.
10+
11+
## Apresentação
12+
13+
Em algum momento, durante o seu processo de desenvolvimento com Django, pode ser que surja a necessidade de criar e restaurar o banco de dados da aplicação. Pensando nisso, resolvi fazer um pequeno tutorial, básico, de como realizar essa operação.
14+
15+
Nesse tutorial, usaremos o [django-dbbackup](https://github.com/django-dbbackup/django-dbbackup), um pacote desenvolvido especificamente para isso.
16+
17+
## Configurando nosso ambiente
18+
19+
Primeiro, partindo do início, vamos criar uma pasta para o nosso projeto e, nela, isolar o nosso ambiente de desenvolvimento usando uma [virtualenv](https://virtualenv.pypa.io/en/latest/index.html):
20+
21+
```shell
22+
mkdir projeto_db && cd projeto_db #criando a pasta do nosso projeto
23+
24+
virtualenv -p python3.8 env && source env/bin/activate #criando e ativando a nossa virtualenv
25+
```
26+
27+
Depois disso e com o nosso ambiente já ativo, vamos realizar os seguintes procedimentos:
28+
29+
```shell
30+
pip install -U pip #com isso, atualizamos a verão do pip instalado
31+
```
32+
33+
## Instalando as dependências
34+
35+
Agora, vamos instalar o [Django](https://www.djangoproject.com/) e o pacote que usaremos para fazer nossos backups.
36+
37+
```shell
38+
pip install Django==3.1.2 #instalando o Django
39+
40+
pip install django-dbbackup #instalando o django-dbbackup
41+
```
42+
43+
## Criando e configurando projeto
44+
45+
Depois de instaladas nossas dependências, vamos criar o nosso projeto e configurar o nosso pacote nas configurações do Django.
46+
47+
```shell
48+
django-admin startproject django_db . #dentro da nossa pasta projeto_db, criamos um projeto Django com o nome de django_db.
49+
```
50+
51+
Depois de criado nosso projeto, vamos criar e popular o nosso banco de dados.
52+
53+
```shell
54+
python manage.py migrate #com isso, sincronizamos o estado do banco de dados com o conjunto atual de modelos e migrações.
55+
```
56+
57+
Criado nosso banco de dados, vamos criar um superusuário para podemos o painel admin do nosso projeto.
58+
59+
```shell
60+
python manage.py createsuperuser
61+
```
62+
63+
Perfeito. Já temos tudo que precisamos para executar nosso projeto. Para execução dele, é só fazermos:
64+
65+
```shell
66+
python manage.py runserver
67+
```
68+
69+
Você terá uma imagem assim do seu projeto:
70+
71+
![](https://jacksonosvaldo.github.io/img/django_db.png)
72+
73+
## Configurando o django-dbbackup
74+
75+
Dentro do seu projeto, vamos acessar o arquivo settings.py, como expresso abaixo:
76+
77+
```shell
78+
django_db/
79+
├── settings.py
80+
```
81+
82+
Dentro desse arquivos iremos, primeiro, adiconar o django-dbbackup às apps do projeto:
83+
84+
```python
85+
INSTALLED_APPS = (
86+
...
87+
'dbbackup', # adicionando django-dbbackup
88+
)
89+
```
90+
91+
Depois de adicionado às apps, vamos dizer para o Django o que vamos salvar no backup e, depois, indicar a pasta para onde será encaminhado esse arquivo. Essa inserção deve ou pode ser feita no final do arquivo _settings.py_:
92+
93+
```python
94+
DBBACKUP_STORAGE = 'django.core.files.storage.FileSystemStorage' #o que salvar
95+
DBBACKUP_STORAGE_OPTIONS = {'location': 'backups/'} # onde salvar
96+
```
97+
98+
Percebam que dissemos para o Django salvar o backup na pasta _backups_, mas essa pasta ainda não existe no nosso projeto. Por isso, precisamos criá-la [fora da pasta do projeto]:
99+
100+
```shell
101+
mkdir backups
102+
```
103+
104+
## Criando e restaurando nosso backup
105+
106+
Já temos tudo pronto. Agora, vamos criar o nosso primeiro backup:
107+
108+
```shell
109+
python manage.py dbbackup
110+
```
111+
112+
Depois de exetudado, será criado um arquivo -- no nosso exemplo, esse arquivo terá uma extensão .dump --, salvo na pasta _backups_. Esse arquivo contem todo backup do nosso banco de dados.
113+
114+
Para recuperarmos nosso banco, vamos supor que migramos nosso sistema de um servidor antigo para um novo e, por algum motivo, nossa base de dados foi corrompida, inviabilizando seu uso. Ou seja, estamos com o sistema/projeto sem banco de dados -- ou seja, exlua ou mova a a sua base dados .sqlite3 para que esse exemplo seja útil --, mas temos os backups. Com isso, vamos restaurar o banco:
115+
116+
```shell
117+
python manage.py dbrestore
118+
```
119+
120+
Prontinho, restauramos nosso banco de dados. O interessante do django-dbbackup, dentre outras coisas, é que ele gera os backups com datas e horários específicos, facilitando o processo de recuperação das informações mais recentes.
121+
122+
Por hoje é isso, pessoal. Até a próxima. ;)
49.9 KB
Loading

env/bin/activate

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# This file must be used with "source bin/activate" *from bash*
2+
# you cannot run it directly
3+
4+
5+
if [ "${BASH_SOURCE-}" = "$0" ]; then
6+
echo "You must source this script: \$ source $0" >&2
7+
exit 33
8+
fi
9+
10+
deactivate () {
11+
unset -f pydoc >/dev/null 2>&1
12+
13+
# reset old environment variables
14+
# ! [ -z ${VAR+_} ] returns true if VAR is declared at all
15+
if ! [ -z "${_OLD_VIRTUAL_PATH:+_}" ] ; then
16+
PATH="$_OLD_VIRTUAL_PATH"
17+
export PATH
18+
unset _OLD_VIRTUAL_PATH
19+
fi
20+
if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then
21+
PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
22+
export PYTHONHOME
23+
unset _OLD_VIRTUAL_PYTHONHOME
24+
fi
25+
26+
# This should detect bash and zsh, which have a hash command that must
27+
# be called to get it to forget past commands. Without forgetting
28+
# past commands the $PATH changes we made may not be respected
29+
if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
30+
hash -r 2>/dev/null
31+
fi
32+
33+
if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then
34+
PS1="$_OLD_VIRTUAL_PS1"
35+
export PS1
36+
unset _OLD_VIRTUAL_PS1
37+
fi
38+
39+
unset VIRTUAL_ENV
40+
if [ ! "${1-}" = "nondestructive" ] ; then
41+
# Self destruct!
42+
unset -f deactivate
43+
fi
44+
}
45+
46+
# unset irrelevant variables
47+
deactivate nondestructive
48+
49+
VIRTUAL_ENV='/home/jacksonosvaldo/Documentos/GitHub_Projetos/pythonclub.github.io/env'
50+
export VIRTUAL_ENV
51+
52+
_OLD_VIRTUAL_PATH="$PATH"
53+
PATH="$VIRTUAL_ENV/bin:$PATH"
54+
export PATH
55+
56+
# unset PYTHONHOME if set
57+
if ! [ -z "${PYTHONHOME+_}" ] ; then
58+
_OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME"
59+
unset PYTHONHOME
60+
fi
61+
62+
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
63+
_OLD_VIRTUAL_PS1="${PS1-}"
64+
if [ "x" != x ] ; then
65+
PS1="${PS1-}"
66+
else
67+
PS1="(`basename \"$VIRTUAL_ENV\"`) ${PS1-}"
68+
fi
69+
export PS1
70+
fi
71+
72+
# Make sure to unalias pydoc if it's already there
73+
alias pydoc 2>/dev/null >/dev/null && unalias pydoc || true
74+
75+
pydoc () {
76+
python -m pydoc "$@"
77+
}
78+
79+
# This should detect bash and zsh, which have a hash command that must
80+
# be called to get it to forget past commands. Without forgetting
81+
# past commands the $PATH changes we made may not be respected
82+
if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
83+
hash -r 2>/dev/null
84+
fi

env/bin/activate.csh

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# This file must be used with "source bin/activate.csh" *from csh*.
2+
# You cannot run it directly.
3+
# Created by Davide Di Blasi <[email protected]>.
4+
5+
set newline='\
6+
'
7+
8+
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH:q" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT:q" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc'
9+
10+
# Unset irrelevant variables.
11+
deactivate nondestructive
12+
13+
setenv VIRTUAL_ENV '/home/jacksonosvaldo/Documentos/GitHub_Projetos/pythonclub.github.io/env'
14+
15+
set _OLD_VIRTUAL_PATH="$PATH:q"
16+
setenv PATH "$VIRTUAL_ENV:q/bin:$PATH:q"
17+
18+
19+
20+
if ('' != "") then
21+
set env_name = ''
22+
else
23+
set env_name = '('"$VIRTUAL_ENV:t:q"') '
24+
endif
25+
26+
if ( $?VIRTUAL_ENV_DISABLE_PROMPT ) then
27+
if ( $VIRTUAL_ENV_DISABLE_PROMPT == "" ) then
28+
set do_prompt = "1"
29+
else
30+
set do_prompt = "0"
31+
endif
32+
else
33+
set do_prompt = "1"
34+
endif
35+
36+
if ( $do_prompt == "1" ) then
37+
# Could be in a non-interactive environment,
38+
# in which case, $prompt is undefined and we wouldn't
39+
# care about the prompt anyway.
40+
if ( $?prompt ) then
41+
set _OLD_VIRTUAL_PROMPT="$prompt:q"
42+
if ( "$prompt:q" =~ *"$newline:q"* ) then
43+
:
44+
else
45+
set prompt = "$env_name:q$prompt:q"
46+
endif
47+
endif
48+
endif
49+
50+
unset env_name
51+
unset do_prompt
52+
53+
alias pydoc python -m pydoc
54+
55+
rehash

env/bin/activate.fish

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# This file must be used using `source bin/activate.fish` *within a running fish ( http://fishshell.com ) session*.
2+
# Do not run it directly.
3+
4+
function _bashify_path -d "Converts a fish path to something bash can recognize"
5+
set fishy_path $argv
6+
set bashy_path $fishy_path[1]
7+
for path_part in $fishy_path[2..-1]
8+
set bashy_path "$bashy_path:$path_part"
9+
end
10+
echo $bashy_path
11+
end
12+
13+
function _fishify_path -d "Converts a bash path to something fish can recognize"
14+
echo $argv | tr ':' '\n'
15+
end
16+
17+
function deactivate -d 'Exit virtualenv mode and return to the normal environment.'
18+
# reset old environment variables
19+
if test -n "$_OLD_VIRTUAL_PATH"
20+
# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
21+
if test (echo $FISH_VERSION | head -c 1) -lt 3
22+
set -gx PATH (_fishify_path "$_OLD_VIRTUAL_PATH")
23+
else
24+
set -gx PATH "$_OLD_VIRTUAL_PATH"
25+
end
26+
set -e _OLD_VIRTUAL_PATH
27+
end
28+
29+
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
30+
set -gx PYTHONHOME "$_OLD_VIRTUAL_PYTHONHOME"
31+
set -e _OLD_VIRTUAL_PYTHONHOME
32+
end
33+
34+
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
35+
and functions -q _old_fish_prompt
36+
# Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`.
37+
set -l fish_function_path
38+
39+
# Erase virtualenv's `fish_prompt` and restore the original.
40+
functions -e fish_prompt
41+
functions -c _old_fish_prompt fish_prompt
42+
functions -e _old_fish_prompt
43+
set -e _OLD_FISH_PROMPT_OVERRIDE
44+
end
45+
46+
set -e VIRTUAL_ENV
47+
48+
if test "$argv[1]" != 'nondestructive'
49+
# Self-destruct!
50+
functions -e pydoc
51+
functions -e deactivate
52+
functions -e _bashify_path
53+
functions -e _fishify_path
54+
end
55+
end
56+
57+
# Unset irrelevant variables.
58+
deactivate nondestructive
59+
60+
set -gx VIRTUAL_ENV '/home/jacksonosvaldo/Documentos/GitHub_Projetos/pythonclub.github.io/env'
61+
62+
# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
63+
if test (echo $FISH_VERSION | head -c 1) -lt 3
64+
set -gx _OLD_VIRTUAL_PATH (_bashify_path $PATH)
65+
else
66+
set -gx _OLD_VIRTUAL_PATH "$PATH"
67+
end
68+
set -gx PATH "$VIRTUAL_ENV"'/bin' $PATH
69+
70+
# Unset `$PYTHONHOME` if set.
71+
if set -q PYTHONHOME
72+
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
73+
set -e PYTHONHOME
74+
end
75+
76+
function pydoc
77+
python -m pydoc $argv
78+
end
79+
80+
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
81+
# Copy the current `fish_prompt` function as `_old_fish_prompt`.
82+
functions -c fish_prompt _old_fish_prompt
83+
84+
function fish_prompt
85+
# Run the user's prompt first; it might depend on (pipe)status.
86+
set -l prompt (_old_fish_prompt)
87+
88+
# Prompt override provided?
89+
# If not, just prepend the environment name.
90+
if test -n ''
91+
printf '%s%s' '' (set_color normal)
92+
else
93+
printf '%s(%s) ' (set_color normal) (basename "$VIRTUAL_ENV")
94+
end
95+
96+
string join -- \n $prompt # handle multi-line prompts
97+
end
98+
99+
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
100+
end

0 commit comments

Comments
 (0)