This content originally appeared on DEV Community 👩💻👨💻 and was authored by Leandro César
- o que é orm?
- por que usar orm?
- quais são os orms para python?
- como escolher um orm?
- por que usar peewee?
- por que usar pony orm?
- por que usar sqlalchemy?
- por que usar tortoise-orm?
- quais versões do python os orms dão suporte?
- quais bancos de dados os orms dão suporte?
- por que django orm não está na comparação?
-
qual é o melhor orm...
- ...para operações rápidas nos dados?
- ...para consultas de alta complexidade?
- ...para relacionamentos complexos entre os dados?
- ...para alta escabilidade?
- ...para projetos menores e mais simples
- ...com melhor curva de aprendizado
- ...para requisitos mínimos de escalabilidade
- ...para requisitos específicos de concorrência
- ...para requisitos mínimos de segurança
- ...para requisitos mínimos de suporte
- ...para uso de banco de dados assíncrono
- ...para requisitos específicos de concorrência
- quais as diferenças entre peewee e pony orm?
- considerações finais
o que é orm?
ORMs (Object-Relational Mappers) são ferramentas fundamentais para qualquer desenvolvedor que trabalha com bancos de dados relacionais. Eles permitem acessar os dados usando a sintaxe de objetos, ao invés de SQL, tornando o código mais limpo e fácil de manter.
por que usar orm?
Existem várias razões para usar um ORM. Primeiro, ele separa a lógica de banco de dados da lógica de negócios, o que torna o código mais fácil de entender e manter. Além disso, ele permite que você trabalhe com dados em um formato nativo de objetos Python, o que é mais intuitivo e fácil de trabalhar.
quais são os orms para python?
Quando se trata de escolher um ORM, existem várias opções disponíveis, incluindo principalmente: SQLAlchemy, Django ORM, Peewee, Tortoise-ORM, Pony ORM e Storm. Cada opção tem suas próprias características e vantagens.
como escolher um orm?
Ao escolher um ORM, é importante considerar suas necessidades específicas e avaliar as características das opções disponíveis. Aqui, vamos comparar brevemente os principais ORMs disponíveis para Python e discutir as características, vantagens e desvantagens, para ajudá-lo a escolher a melhor opção para seu projeto.
por que usar peewee?
Peewee é uma escolha popular para projetos de pequeno e médio porte, oferece uma abstração simples e intuitiva do banco de dados, e é fácil de usar e aprender. Ele é uma boa escolha para projetos menores e mais simples, e pode ser uma boa opção para desenvolvedores iniciantes que estão começando a trabalhar com ORMs.
$ pip install peewee
from datetime import datetime
from peewee import *
# define a conexão com o banco de dados
db = SqliteDatabase(":memory:")
# define a classe do modelo
class User(Model):
id = IntegerField(primary_key=True)
name = TextField()
created_on = DateTimeField(default=datetime.now)
class Meta:
database = db
# cria a tabela
db.create_tables([User])
# cria um novo usuário
user = User(name="John Doe")
user.save()
# busca um usuário pelo id
user = User.get(User.id == 1)
print(user.name)
# atualiza o nome do usuário
user.name = "Jane Doe"
user.save()
# deleta o usuário
user.delete_instance()
por que usar pony orm?
Pony ORM é muito semelhante ao Peewee, uma escolha para projetos de pequeno e médio porte, para projetos menores e mais simples, e boa opção para desenvolvedores iniciantes.
$ pip install pony
from datetime import datetime
from pony.orm import *
# define a conexão com o banco de dados
db = Database()
db.bind(provider="sqlite", filename=":memory:")
# define a classe do modelo
class User(db.Entity):
id = PrimaryKey(int, auto=True)
name = Required(str)
created_on = Required(datetime, default=datetime.now)
# cria as tabelas no banco de dados
db.generate_mapping(create_tables=True)
with db_session:
# cria um novo usuário
user = User(name="John Doe")
commit()
# busca um usuário pelo id
user = User[1]
print(user.name)
# atualiza o nome do usuário
user.name = "Jane Doe"
commit()
# deleta o usuário
user.delete()
commit()
por que usar sqlalchemy?
SQLAlchemy é considerado um dos ORMs mais maduros e completos disponíveis, oferecendo uma grande variedade de recursos para lidar com bancos de dados. Ele é uma boa escolha para projetos de médio e grande escala, e é amplamente utilizado em projetos de produção de grande escala.
$ pip install [SQLAlchemy](https://docs.sqlalchemy.org/en/latest/)
from datetime import datetime
from sqlalchemy import Column, DateTime, Integer, Text, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# define a conexão com o banco de dados
engine = create_engine("sqlite:///:memory:")
# define a classe do modelo
Base = declarative_base()
class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True)
name = Column(Text)
created_on = Column(DateTime, default=datetime.utcnow)
# cria as tabelas no banco de dados
Base.metadata.create_all(bind=engine)
# cria uma sessão com o banco de dados
Session = sessionmaker(bind=engine)
with Session as session:
# cria um novo usuário
user = User(name="John Doe")
session.add(user)
session.commit()
# busca um usuário pelo id
user = session.query(User).get(1)
print(user.name)
# atualiza o nome do usuário
user.name = "Jane Doe"
session.commit()
# deleta o usuário
session.delete(user)
por que usar tortoise-orm?
Tortoise-ORM é construído sobre o asyncio
e é projetado para projetos que precisam de alta performance e escalabilidade, especialmente quando se trata de operações assíncronas. Ele é uma boa escolha para projetos que exigem requisitos específicos de concorrência e escalabilidade. Ele é fácil de usar e aprender, e oferece uma abstração simples e intuitiva do banco de dados.
$ pip install tortoise-orm
O Tortoise-orm utiliza funções de corotina (await
) para as operações no banco de dados. Lembre-se de que esse exemplo deve ser executado dentro de uma função async.
# __main__.py
from datetime import datetime
from tortoise import Tortoise, fields, run_async
from tortoise.models import Model
# define a classe do modelo
class User(Model):
id = fields.IntField(pk=True)
name = fields.TextField()
created_on = fields.DatetimeField(default=datetime.now)
async def run():
# define a conexão com o banco de dados
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
# cria as tabelas no banco de dados
await Tortoise.generate_schemas()
# cria um novo usuário
user = await User.create(name="John Doe")
# busca um usuário pelo id
user = await User.get(id=1)
print(user.name)
# atualiza o nome do usuário
user.name = "Jane Doe"
await user.save()
# deleta o usuário
await user.delete()
run_async(run())
quais versões do python os orms dão suporte?
Peewee | Pony ORM | SQLAlchemy | Tortoise-ORM | |
---|---|---|---|---|
Python | 2.7+ or 3.4+ | 2.7 or 3 | 2.7 or 3.6+ | 3.6+ |
quais bancos de dados os orms dão suporte?
Peewee | Pony ORM | SQLAlchemy | Tortoise-ORM | |
---|---|---|---|---|
SQLite | x | x | x | x |
MySQL/MariaDB | x | x | x | x |
PostgreSQL | x | x | x | x |
Oracle | x | x | ||
Microsoft SQL Server | x | |||
CockroachDB | x | x |
por que django orm não está na comparação?
Em geral, não é recomendado usar o Django ORM em uma aplicação que não usa o Django. Isso se deve ao fato de que o Django ORM foi projetado especificamente para trabalhar com o framework Django e suas estruturas de dados. Ele pode não funcionar corretamente ou ter limitações em um ambiente fora do Django.
O Django ORM tem certas dependências do Django, como o gerenciador de configurações e o gerenciador de URLs, que podem não estar presentes em uma aplicação sem o Django. Isso pode tornar a implementação do Django ORM em uma aplicação não-Django um desafio e complicar o código.
Se você estiver familiarizado com o Django ORM e desejar usá-lo em uma aplicação não-Django, é possível fazê-lo. Mas devido a isso, ele não foi incluido nas comparações.
qual é o melhor orm...
Todos os ORMs mencionados são bons e têm suas próprias vantagens e desvantagens. A escolha do melhor ORM para um determinado projeto dependerá das necessidades específicas do projeto e das preferências do desenvolvedor.
Assim, vamos analisar considerando alguns cenários mais específicos e concretos.
...para operações rápidas nos dados?
A performance na execução das operações do banco, que costuma ser um dos indicadores mais procurados na hora de escolher um ORM, depende de vários fatores, como: o banco de dados usado, a complexidade das consultas e o tamanho do conjunto de dados.
Portanto, é difícil comparar diretamente a performance de diferentes ORMs sem considerar esses fatores. Mas foi realizado, no início de 2022, um benchmark entre os ORMs considerados diferentes cenários. Uma visão geral do benchmark pode ser visto no gráfico abaixo.
Disclaimer: o benchmark foi realizado por contribuidores do projeto Tortoise-ORM
Fonte: https://github.com/tortoise/orm-benchmarks
...para consultas de alta complexidade?
Para um projeto com consultas SQL de alta complexidade, SQLAlchemy é uma das melhores opções de ORM para Python. Ele é considerado um dos ORMs mais maduros e completos disponíveis e oferece uma grande variedade de recursos, incluindo suporte para vários bancos de dados, suporte a transações, suporte a consultas avançadas e suporte a mapeamento objeto-relacional avançado.
SQLAlchemy oferece uma grande flexibilidade no que diz respeito a consultas, tanto através do uso de sua API de consultas nativa quanto através do uso de SQL bruto. Além disso, ele permite a utilização de expressões avançadas, sub-consultas e junções complexas, o que é útil para projetos com consultas complexas.
...para relacionamentos complexos entre os dados?
Para um projeto com relacionamentos complexos entre as tabelas, SQLAlchemy também é uma das melhores opções de ORM para Python. Ele oferece suporte a mapeamento objeto-relacional avançado (ORM) e suporta vários tipos de relacionamentos, incluindo relacionamentos um-para-um, um-para-muitos e muitos-para-muitos. Ele também permite a criação de tabelas de junção e tabelas de associação, o que é útil para lidar com relacionamentos complexos.
É verdade que os outros ORMs (Peewee, Pony ORM e Tortoise-ORM) também suportam relacionamentos um-para-um, um-para-muitos e muitos-para-muitos, assim como o SQLAlchemy. A diferença desses três ORMs para o SQLAlchemy, é que o SQLAlchemy tem uma abstração mais flexível e completa para trabalhar com relacionamentos complexos. Ele oferece suporte a mapeamento objeto-relacional avançado e recursos avançados de carregamento de dados, como lazy loading e eager loading, que permitem carregar dados relacionados de forma eficiente.
...para alta escabilidade?
Para um projeto que exige escalabilidade, SQLAlchemy também é uma das melhores opções de ORM para Python. Como dito, é considerado um dos ORMs mais maduros e completos disponíveis e oferece uma grande variedade de recursos. SQLAlchemy é amplamente utilizado em projetos de produção de grande escala e é uma boa escolha para projetos complexos que possam exigir escalabilidade e performance. Ele tem suporte a vários tipos de engenharia de dados, incluindo recursos de replicação e escalabilidade.
...para projetos menores e mais simples
Se você estiver trabalhando em um projeto menor e mais simples, que não exige uma grande quantidade de recursos avançados, o Pony ORM ou Peewee podem ser boas opções. Eles são fáceis de usar e aprender e oferecem uma abstração simples e intuitiva do banco de dados.
...com melhor curva de aprendizado
Se você estiver começando a trabalhar com ORMs e deseja algo mais fácil de usar e aprender, o Pony ORM ou Peewee podem ser boas opções. Eles têm uma curva de aprendizado menor do que o SQLAlchemy.
...para requisitos mínimos de escalabilidade
Se você estiver trabalhando em um projeto com requisitos mínimos de escalabilidade, o Pony ORM ou Peewee podem ser boas opções. Eles são leves e fáceis de usar e podem ser suficientes para lidar com o tráfego e o volume de dados do seu projeto.
...para requisitos específicos de concorrência
Se você estiver trabalhando em um projeto com requisitos específicos de concorrência, o Tortoise-ORM é uma boa opção pois ele é construído sobre o asyncio e suporta vários bancos de dados.
...para requisitos mínimos de segurança
Se você estiver trabalhando em um projeto com requisitos mínimos de segurança e não precisar de recursos avançados de segurança, como proteção contra SQL injection, o Pony ORM ou Peewee podem ser boas opções.
...para requisitos mínimos de suporte
Se você estiver trabalhando em um projeto com requisitos mínimos de suporte e não precisar de recursos avançados de suporte, como suporte para vários bancos de dados, o Pony ORM ou Peewee podem ser boas opções.
...para uso de banco de dados assíncrono
O Tortoise-ORM é construído sobre o asyncio e é uma boa opção para projetos que precisam de alta performance e escalabilidade, especialmente quando se trata de operações assíncronas.
...para requisitos específicos de concorrência
O Tortoise-ORM é uma boa escolha para projetos que exigem requisitos específicos de concorrência, ele é construído sobre o asyncio e suporta vários bancos de dados, isso lhe permite lidar com concorrência de forma eficiente.
quais as diferenças entre peewee e pony orm?
Pony ORM e Peewee são muito semelhantes em características. Ambas as bibliotecas fornecem uma sintaxe simples para consultas. Entretanto, há algumas diferenças:
- Peewee é considerado mais leve e minimalista, enquanto Pony ORM é mais completo e tem mais recursos.
- Peewee tem uma sintaxe de consulta mais simples e intuitiva, enquanto Pony ORM tem uma sintaxe mais avançada e poderosa.
- Peewee tem uma documentação mais completa e melhor organizada, enquanto Pony ORM tem uma documentação menos completa e um pouco mais difícil de navegar.
- Peewee é mais rápido e tem menos dependências do que Pony ORM.
Em resumo, Peewee é uma boa escolha se você estiver procurando por uma biblioteca simples e fácil de usar, enquanto Pony ORM é uma boa escolha se você precisar de mais recursos e flexibilidade.
considerações finais
De forma geral, SQLAlchemy é considerado um dos ORMs mais maduros e completos para Python, e é amplamente utilizado em projetos de produção de grande escala, ele é flexível e oferece uma grande variedade de recursos, incluindo, suporte a transações, suporte a consultas avançadas e suporte a mapeamento objeto-relacional avançado. Ele é uma boa escolha para projetos complexos e que possa exigir escalabilidade.
Pony ORM e Peewee são ORMs mais simples e fáceis de usar, eles são bons para projetos menores e mais simples, e são uma boa escolha para desenvolvedores iniciantes, pois oferecem uma abstração simples e intuitiva do banco de dados.
Tortoise-ORM é outro ORM popular para Python, ele é construído sobre o asyncio e suporta SQLite, MySQL e PostgreSQL. Ele é fácil de usar e aprender e é uma boa escolha para projetos com requisitos de concorrência e escalabilidade.
Em resumo, cada ORM tem suas próprias características e recursos únicos, e a escolha do melhor ORM para um projeto dependerá das necessidades específicas do projeto, como a escalabilidade, complexidade das consultas e necessidade de concorrência.
É recomendável experimentar cada uma dessas bibliotecas e comparar as funcionalidades e facilidade antes de tomar uma decisão.
This content originally appeared on DEV Community 👩💻👨💻 and was authored by Leandro César
Leandro César | Sciencx (2023-01-13T22:46:14+00:00) orms python: uma visão geral. Retrieved from https://www.scien.cx/2023/01/13/orms-python-uma-visao-geral/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.