SQLModel: Simplificando o Mapeamento de Objetos para Bancos de Dados em Python \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 13 Horas 

 36 Min 

 24 Seg 

   Tempo restante da oferta: 13 36 24 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) SQLModel: Simplificando o Mapeamento de Objetos para Bancos de Dados em Python  [ Bancos de Dados ](https://www.treinaweb.com.br/blog/categoria/bancos-de-dados) [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

# SQLModel: Simplificando o Mapeamento de Objetos para Bancos de Dados em Python

 Desvende o SQLModel: Simplificando o Mapeamento de Objetos Python para Bancos de Dados Relacionais. Domine o CRUD de forma eficaz!

 [ Cleyson Lima ](https://www.treinaweb.com.br/blog/autor/cleyson-lima) 3 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/10/SQLMODEL.jpg)  

A persistência de dados é uma parte fundamental no desenvolvimento de software, e quando se trata de aplicativos que utilizam bancos de dados relacionais, a tarefa de mapear objetos [Python](https://www.treinaweb.com.br/blog/guia-da-linguagem-python) para tabelas de banco de dados pode ser complexa e propensa a erros. Felizmente, o [SQLModel](https://sqlmodel.tiangolo.com/) é uma biblioteca Python que simplifica significativamente esse processo. Neste artigo, exploraremos o SQLModel, suas principais funcionalidades, vantagens e desvantagens, e como ele pode ser uma ferramenta valiosa para desenvolvedores que trabalham com bancos de dados relacionais em Python.

 [ ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/10/E-BOOK-GRATUITO-PYTHON.jpg) ](https://www.treinaweb.com.br/ebook/guia-python/)

## O que é o SQLModel?

O SQLModel é uma biblioteca Python que simplifica o mapeamento de objetos para bancos de dados relacionais. Ele foi inspirado pelo SQLAlchemy, outro popular mapeador objeto-relacional ([ORM](https://www.treinaweb.com.br/blog/o-que-e-orm)) em Python, mas possui uma abordagem mais simples e intuitiva. O SQLModel é projetado para ser fácil de usar e permite que os desenvolvedores definam modelos de dados em Python que são automaticamente traduzidos em esquemas de banco de dados e operações CRUD (Create, Read, Update, Delete).

A principal vantagem do SQLModel é sua simplicidade e a capacidade de definir modelos de dados de forma declarativa, sem a necessidade de escrever consultas SQL manualmente. Ele suporta vários bancos de dados, incluindo SQLite, PostgreSQL e MySQL, tornando-o uma escolha versátil para projetos Python que precisam interagir com diferentes sistemas de gerenciamento de banco de dados.

## Principais funcionalidades

O SQLModel oferece uma variedade de funcionalidades que facilitam o mapeamento de objetos para bancos de dados relacionais:

1. **Declaração de modelos:** Os modelos de dados são definidos como classes Python, onde cada atributo da classe representa uma coluna na tabela do banco de dados. O SQLModel automaticamente cria o esquema do banco de dados com base na definição da classe.
2. **Operações CRUD automáticas:** Com o SQLModel, você pode realizar operações CRUD (Create, Read, Update, Delete) em seus modelos de dados de forma simples e intuitiva. Não é necessário escrever consultas SQL complexas.
3. **Validações de dados:** O SQLModel oferece suporte para validações de dados, garantindo que os valores inseridos em um modelo correspondam às regras definidas na classe do modelo.
4. **Relacionamentos entre modelos:** É possível definir relacionamentos entre modelos de forma simples, como relacionamentos um-para-muitos e muitos-para-muitos.
5. **Suporte a tipos de dados personalizados:** Além dos tipos de dados padrão, o SQLModel permite que você defina tipos de dados personalizados para suas colunas de banco de dados.

[  ![Python - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/python.svg)   Curso Python - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/python-fundamentos)

## Exemplo prático

Agora vamos para um simples exemplo para entendermos como usar o SQLModel em um projeto Python. Imagine que tenhamos uma tabela SQL chamada `curso` com as seguintes colunas:

- id
- titulo
- descricao
- carga\_horaria
- qtd\_exercicios

idtitulodescricaocarga\_horariaqtd\_exercicios1Python - FundamentosCurso de fundamentos sobre a linguagem Python101402Python - Orientação a objetosCurso sobre orientação a objetos com a linguagem Python121343Python - SQLAlchemy ORMCurso sobre a ORM SQLAlchemy do Python25133

Nosso objetivo com esse exemplo é conseguir criar a tabela exemplificada acima com SQLModel e realizar as operações de CRUD nessa tabela, para esse exemplo nós vamos utilizar o SQLite para simplificar o ambiente de desenvolvimento.

### Preparação do projeto

Primeiramente vamos criar um ambiente virtual para não termos que instalar o SQLModel de maneira global em nossa máquina, para isso execute o seguinte comando:

```bash
# Linux ou macOS
python3 -m venv .venv
sourve .venv/bin/activate

# Windows
python -m venv .venv
.venv\Scripts\Activate

```

Agora que temos o ambiente virtual criado e ativado, vamos prosseguir para a instalação do SQLModel com o seguinte comando:

```bash
pip install sqlmodel

```

[  ![Python - Collections](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/python.svg)   Curso Python - Collections Conhecer o curso ](https://www.treinaweb.com.br/curso/python-collections)

### Criação do model

Agora que já temos o SQLModel instalado podemos escrever o nosso código Python, vamos criar um arquivo chamado `app.py` que irá conter o nosso código. Inicialmente iremos colocar o seguinte código:

```python
from typing import Optional

from sqlmodel import Field, SQLModel

class Curso(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    titulo: str
    descricao: str
    carga_horaria: int
    qtd_exercicios: int

```

Com isso já temos o código da classe que irá representar a nossa tabela no banco. Veja que o SQLModel se utiliza das tipagens providas para definir as caracteristcias das colunas que serão criadas na tabela do banco de dados.

Ou seja, se um atributo da classe foi tipado como `str` a respectiva coluna no banco de dados terá o tipo `VARCHAR` e caso não informemos que o tipo é `Optinal` a coluna será `NOT NULL`. Além disso, caso queira ter um maior controle sobre a DDL que irá gerar a coluna você pode utilizar a classe `Field` para passar mais informações, como foi feito para o atributo `id`.

### Criando as tabelas

Para não termos que criar a tabela manualmente no banco de dados, podemos fazer com que o próprio SQLModel crie essas tabelas:

```python
from typing import Optional

from sqlmodel import Field, SQLModel, create_engine

class Curso(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    titulo: str
    descricao: str
    carga_horaria: int
    qtd_exercicios: int

engine = create_engine("sqlite:///curso.db", echo=True)
SQLModel.metadata.create_all(engine)

```

Utilizamos a função `create_engine` do SQLModel para criar uma engine que será responsável prover as conexões com o banco de dados, logo em seguida utilizamos a função `create_all` presente em `metadata` da classe `SQLModel` para que todos os modelos presentes no contexto atual sejam criadas no banco de dados.

Ao executarmos esse código com o comando `python [app.py](http://app.py)` veremos uma saída semelhante a essa no terminal:

```bash
2023-10-02 14:32:40,999 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-10-02 14:32:40,999 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("curso")
2023-10-02 14:32:40,999 INFO sqlalchemy.engine.Engine [raw sql] ()
2023-10-02 14:32:40,999 INFO sqlalchemy.engine.Engine PRAGMA temp.table_info("curso")
2023-10-02 14:32:40,999 INFO sqlalchemy.engine.Engine [raw sql] ()
2023-10-02 14:32:41,000 INFO sqlalchemy.engine.Engine 
CREATE TABLE curso (
        id INTEGER NOT NULL, 
        titulo VARCHAR NOT NULL, 
        descricao VARCHAR NOT NULL, 
        carga_horaria INTEGER NOT NULL, 
        qtd_exercicios INTEGER NOT NULL, 
        PRIMARY KEY (id)
)

2023-10-02 14:32:41,000 INFO sqlalchemy.engine.Engine [no key 0.00007s] ()
2023-10-02 14:32:41,012 INFO sqlalchemy.engine.Engine COMMIT

```

Isso informa que a SQL de criação da tabela foi executada e inclusive veremos que um arquivo chamado `curso.db` foi criado no mesmo nível do nosso arquivo `app.py`.

[  ![Python - Orientação a objetos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/python.svg)   Curso Python - Orientação a objetos Conhecer o curso ](https://www.treinaweb.com.br/curso/python-orientacao-a-objetos)

### Inserindo dados

Agora que já temos o banco criado, podemos começar a realizar operações com o SQLModel, para inserirmos dados na tabela, basta criarmos uma instância do modelo e então utilizar uma Session do SQLModel para adicionar essa instancia e então submeter as alterações realizadas, isso pode ser feito da seguinte maneira:

```python
from typing import Optional

from sqlmodel import Field, SQLModel, create_engine, Session

class Curso(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    titulo: str
    descricao: str
    carga_horaria: int
    qtd_exercicios: int

engine = create_engine("sqlite:///curso.db", echo=True)
SQLModel.metadata.create_all(engine)

with Session(engine) as session:
    curso_python = Curso(
        titulo="Curso de Python",
        descricao="Curso intermediário de Python",
        carga_horaria=40,
        qtd_exercicios=20,
    )
    session.add(curso_python)
    session.commit()

```

Veja que criamos uma instância da classe `Session` e para ela passamos a nossa `engine`, uma vez que tenhamos a Session criada, basta passarmos as instâncias do modelo para o método `add` e por fim, executar o método `commit` para persistir as alterações no banco de dados.

Ao executarmos o código acima, veremos a seguinte saída no terminal:

```bash
2023-10-02 14:41:40,602 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-10-02 14:41:40,602 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("curso")
2023-10-02 14:41:40,602 INFO sqlalchemy.engine.Engine [raw sql] ()
2023-10-02 14:41:40,602 INFO sqlalchemy.engine.Engine COMMIT
2023-10-02 14:41:40,603 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-10-02 14:41:40,604 INFO sqlalchemy.engine.Engine INSERT INTO curso (titulo, descricao, carga_horaria, qtd_exercicios) VALUES (?, ?, ?, ?)
2023-10-02 14:41:40,604 INFO sqlalchemy.engine.Engine [generated in 0.00012s] ('Curso de Python', 'Curso intermediário de Python', 40, 20)
2023-10-02 14:41:40,605 INFO sqlalchemy.engine.Engine COMMIT

```

Veja na linha 6 a SQL executada pelo SQLModel para realizar a inserção dos dados no banco.

### Consultando dados

Para realizar consultas com o SQLModel, nós utilizamos a função `select` para montarmos a query de consulta que será realizada e em seguida usamos o método `execute` da Session para realizar a consulta no banco. Veja como podemos realizar diferentes consultas com o SQLModel:

```python
from typing import Optional

from sqlmodel import Field, SQLModel, create_engine, Session, select

class Curso(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    titulo: str
    descricao: str
    carga_horaria: int
    qtd_exercicios: int

engine = create_engine("sqlite:///curso.db", echo=True)
SQLModel.metadata.create_all(engine)

with Session(engine) as session:
    # Consulta todos os cursos
    query = select(Curso)
    cursos = session.exec(query).all()
    print("Todos os cursos:")
    for curso in cursos:
        print(f"Curso: {curso.titulo}")

    # Consulta um curso específico pelo id
    query = select(Curso).where(Curso.id == 1)
    curso = session.exec(query).first()
    print(f"Curso: {curso.titulo}")

    # Consulta um curso específico pelo título com like 
    query = select(Curso).where(Curso.titulo.like("%Python%"))
    curso = session.exec(query).first()
    print(f"Curso: {curso.titulo}")

```

[  ![Python - SQLAlchemy ORM](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/python.svg)   Curso Python - SQLAlchemy ORM Conhecer o curso ](https://www.treinaweb.com.br/curso/python-sqlalchemy)

### Atualizando dados

Para podermos realizar edições basta primeiramente realizarmos uma consulta para obter uma instância do modelo que queremos editar, então realizar as devidas alterações e por fim excutar o método `commit` da session para que as alterações realizadas no modelo sejam persistidas no banco de dados.

```python
from typing import Optional

from sqlmodel import Field, SQLModel, create_engine, Session, select

class Curso(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    titulo: str
    descricao: str
    carga_horaria: int
    qtd_exercicios: int

engine = create_engine("sqlite:///curso.db", echo=True)
SQLModel.metadata.create_all(engine)

with Session(engine) as session:
    # Consulta o curso que deseja alterar
    query = select(Curso).where(Curso.id == 1)
    curso = session.exec(query).first()

    # Altera os dados do curso
    curso.titulo = "Curso de Python editado"
    curso.descricao = "Descrição do curso de Python editado"
    curso.carga_horaria = 40
    curso.qtd_exercicios = 30

    # Salva as alterações no banco de dados
    session.commit()

```

### Exclusão de dados

Para realizar uma remoção com SQLModel, nós precisamos buscar a instância do que modelo que queremos remover e então passar essa instancia para o método `delete` da session e por fim executar o `commit` para persistir as alterações no banco de dados:

```python
from typing import Optional

from sqlmodel import Field, SQLModel, create_engine, Session, select

class Curso(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    titulo: str
    descricao: str
    carga_horaria: int
    qtd_exercicios: int

engine = create_engine("sqlite:///curso.db", echo=True)
SQLModel.metadata.create_all(engine)

with Session(engine) as session:
    # Consulta o curso que deseja remover
    query = select(Curso).where(Curso.id == 1)
    curso = session.exec(query).first()

    # Remove o curso
    session.delete(curso)
    session.commit()

```

## Conclusão

O SQLModel é uma biblioteca Python poderosa que simplifica o mapeamento de objetos para bancos de dados relacionais. Com sua abordagem declarativa e facilidade de uso, ele é uma escolha atraente para projetos que desejam minimizar a complexidade do acesso a bancos de dados e reduzir a quantidade de código repetitivo. No entanto, é importante considerar as necessidades específicas do seu projeto, pois em cenários muito complexos, outras soluções ORM mais avançadas podem ser mais adequadas. Em geral, o SQLModel é uma ferramenta valiosa que pode acelerar o desenvolvimento de aplicativos Python que dependem de bancos de dados relacionais.

Por fim, caso queira aprender mais sobre ORM’s no Python, saiba que aqui na [TreinaWeb](https://www.treinaweb.com.br/) temos o curso [Python - SQLAlchemy ORM](https://www.treinaweb.com.br/curso/python-sqlalchemy) que possui 04h11 de vídeo e um total de 33 exercícios.

Veja quais são os tópicos abordados durante o curso Python - SQLAlchemy ORM:

- O que é o SQLAlchemy e como o ORM funciona;
- Como instalar o SQLAlchemy utilizando o PIP em qualquer sistema operacional através do PyCharm;
- Como utilizar o SQLAlchemy para conexão com bancos de dados MySQL;
- Como mapear entidades utilizando o modo declarativo;
- Como mapear entidades utilizando os Schemas;
- Como adicionar, editar e remover registros do banco de dados;
- Como listar, filtrar, buscar e ordenar registros do banco de dados;
- Como implementar os relacionamentos 1/N e N/N com o SQLALchemy;
- Como utilizar o Eager Loading na listagem de dados com relacionamentos;
- Como configurar o modo CASCADE para garantir a integridade do banco de dados na exclusão de registros.

 [ ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/06/sessao-mentoria.jpg) ](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?forma=cartao)

- [ #Python ](https://www.treinaweb.com.br/blog/tag/python)
- [ #SQLAlchemy ](https://www.treinaweb.com.br/blog/tag/sqlalchemy)
- [ #ORM ](https://www.treinaweb.com.br/blog/tag/orm)
- [ #SQLModel ](https://www.treinaweb.com.br/blog/tag/sqlmodel)

Autor

 ![Cleyson Lima](//secure.gravatar.com/avatar/db30efb102ffa5d5204cebe12060b111?d=mm)

## Cleyson Lima

 Professor, programador, fã de One Piece e finge saber cozinhar. Cleyson é graduando em Licenciatura em Informática pelo IFPI - Campus Teresina Zona Sul, nos anos de 2019 e 2020 esteve envolvido em vários projetos coordenados pela secretaria municipal de educação da cidade de Teresina, onde o foco era introduzir alunos da rede pública no mundo da programação e robótica. Hoje é instrutor dos cursos de Spring na TreinaWeb, mas diz que seu coração sempre pertencerá ao Python. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/cleyson-lima)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/08/07161700/gerenciamento-python-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     4 anos atrás

    ##  [ Empacotando e publicando pacotes Python no PyPi ](https://www.treinaweb.com.br/blog/empacotando-e-publicando-pacotes-python-no-pypi) 

     Neste artigo iremos aprender como funciona o processo de empacotar e distribuir nossos próprios pacotes Python no PyPi.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/12/05091425/estrutura-dados-python-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     7 anos atrás

    ##  [ Principais Estruturas de Dados no Python ](https://www.treinaweb.com.br/blog/principais-estruturas-de-dados-no-python) 

     No Python, as principais estruturas são as Listas, Sets, Dicionários e Tuplas e neste artigo veremos as diferenças e principais características de cada uma.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/12/tipagem-no-python-com-type-hints-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Tipagem no Python com Type Hints ](https://www.treinaweb.com.br/blog/tipagem-no-python-com-type-hints) 

     Neste artigo vamos aprender sobre os Type Hints no Python, veremos como eles funcionam e como podem nos ajudar a escrever códigos mais legíveis.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/03/guia-da-linguagem-python-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     6 anos atrás

    ##  [ Guia da linguagem Python ](https://www.treinaweb.com.br/blog/guia-da-linguagem-python) 

     Entenda os principais conceitos para iniciar seus estudos neste guia da linguagem Python.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/05/IDE-PYTHON-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     6 anos atrás

    ##  [ Orientação a objetos em Python ](https://www.treinaweb.com.br/blog/orientacao-a-objetos-em-python) 

     Veja neste artigo os principais conceitos do paradigma orientação a objetos e como eles se aplicam no Python.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/01/instalacao-do-python-no-windows-linux-e-macos-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     6 anos atrás

    ##  [ Instalação do Python e nosso primeiro Olá Mundo ](https://www.treinaweb.com.br/blog/instalacao-do-python-e-nosso-primeiro-ola-mundo) 

     Neste artigo vamos ver como realizar a instalação do Python nos sistemas Windows, Linux e MacOS. Além disso, vamos ver como escrever e executar nosso primeiro programa com a linguagem Python.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/11/consumindo-api-python-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     6 anos atrás

    ##  [ Consumindo APIs com Python - Parte 2 ](https://www.treinaweb.com.br/blog/consumindo-apis-com-python-parte-2) 

     Veja neste artigo como consumir APIs com Python.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/11/consumindo-api-python-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     6 anos atrás

    ##  [ Consumindo APIs com Python - Parte 1 ](https://www.treinaweb.com.br/blog/consumindo-apis-com-python-parte-1) 

     Veja neste artigo como consumir APIs com Python.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/11/conheca-o-pyramid-framework-python-para-desenvolvimento-web-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     6 anos atrás

    ##  [ Conheça o Pyramid, Framework Python para desenvolvimento web ](https://www.treinaweb.com.br/blog/conheca-o-pyramid-framework-python-para-desenvolvimento-web) 

     Veja neste artigo o que é o Pyramid, Framework Python para desenvolvimento web.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/05/IDE-PYTHON-400x280.png)  [ Python ](https://www.treinaweb.com.br/blog/categoria/python) 

     7 anos atrás

    ##  [ Principais IDEs para desenvolvimento Python ](https://www.treinaweb.com.br/blog/principais-ides-para-desenvolvimento-python) 

     Veja neste artigo as principais IDEs para desenvolvimento Python.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/07093212/PYTHON-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     7 anos atrás

    ##  [ O que é Python? ](https://www.treinaweb.com.br/blog/o-que-e-python) 

     Veja neste artigo o que é Python e suas principais características.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/02/18160141/MANIPULANDO-ARQUIVOS-PYTHON-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     7 anos atrás

    ##  [ Manipulando arquivos com Python ](https://www.treinaweb.com.br/blog/manipulando-arquivos-com-python) 

     Saber trabalhar com arquivos é essencial para qualquer desenvolvedor e é certo que em sua vida como desenvolvedor, em algum momento você terá que lidar com esta situação. Por isso, veremos neste artigo como manipular arquivos com Python.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **13h 36min 24s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
