Tipos de Dados no SQLite e tipos correspondentes em Python

Tipos de Dados no SQLite e os tipos correspondentes em Python

Neste artigo vamos discutir brevemente os tipos de dados disponíveis no SQLite, juntamente com os tipos de dados correspondentes no Python.

O que são Tipos de Dados?

Os tipos de dados representam os diferentes formatos e faixas de valores que podem ser armazenados em um banco de dados. Eles definem o tipo de informação que pode ser armazenado em uma coluna de uma tabela, e seu domínio (faixa de valores válidos).

Também determinam como os dados serão armazenados em disco, como serão manipulados e quais operações podem (ou não) ser realizadas sobre eles.

Os tipos em um banco de dados são importantes porque garantem a integridade dos dados e ajudam a otimizar o armazenamento e a recuperação de informações. Cada um tem suas próprias características e restrições, e é importante escolher o tipo mais apropriado para cada coluna com base no tipo de informação que será armazenada.

Classificação dos tipos de dados

Podemos classificar os tipos de dados em bancos de dados da seguinte forma:

  • Tipos numéricos: Armazenam valores numéricos, como valores inteiros, números de ponto flutuante e números decimais.
  • Tipos de caracteres: Armazenam strings de caracteres, como nomes, endereços e descrições. Podem incluir tipos de caracteres fixos (char) e variáveis (varchar).
  • Tipos de data e hora: Armazenam datas, horas ou data e hora combinadas. Isso pode incluir tipos como DATE, TIME, DATETIME e TIMESTAMP.
  • Tipos booleanos: Armazenam valores booleanos, como verdadeiro (true) ou falso (false).
  • Tipos de sequência: Armazenam sequências de bytes, como imagens, arquivos de áudio ou arquivos binários.
  • Tipos de coleção: Permitem armazenar coleções de valores, como listas, conjuntos e dicionários.
  • Tipos especiais: Alguns bancos de dados oferecem tipos de dados especiais para armazenar dados geoespaciais, JSON, endereços de rede, XML, etc.

Vejamos agora como são classificados os tipos de dados no SQLite.

Classe de Armazenamento em SQLite

Uma classe de armazenamento é, basicamente, uma coleção de tipos de dados similares, como tipos inteiros, de ponto flutuante ou de strings. Em SQLite existem as seguintes cinco classes de armazenamento (tipos de dados) disponíveis:

Classe de Armazenamento Valores Armazenados (Domínio)
NULL Valor nulo (NULL) ou ausente
INTEGER Números inteiros com sinal, com até 8 bytes de tamanho. Também para data e hora no formato de tempo Unix (número de segundos decorridos desde 01/01/1970 00:00:00 UTC).
REAL Valores de ponto flutuante de precisão dupla, no padrão IEEE com 8 bytes de comprimento
TEXT Strings de texto de comprimento variável, codificadas em UTF-8, UTF-16BE ou UTF-16LE. Também empregado para armazenar dados de data e hora, no formato de strings no padrão ISO 8601.
BLOB Dados armazenados exatamente como inseridos, geralmente em formato binário, como imagens, arquivos, etc.

E o tipo booleano (lógico)?

O SQLite não possui uma classe de armazenamento separada para dados booleanos. Em vez disso, valores booleanos são armazenados na forma de números inteiros 0 (equivalente a falso) e 1 (equivalente a verdadeiro).

O sistema também reconhece as palavras-chave “TRUE” e “FALSE”, a partir da versão 3.23.0, sendo, na verdade, apenas grafias alternativas para os literais inteiros 1 e 0, respectivamente.

Na tabela a seguir comparamos os tipos de dados em SQLite e seus tipos correspondentes em Python:

Classe de Armazenamento SQLite Tipo de Dado (Classe) em Python
NULL NoneType
INTEGER int
REAL float
TEXT str
BLOB bytes

É importante lembrar que o SQLite é um banco de dados de tipagem dinâmica, ou ainda tipagem flexível, o que significa que ele é flexível em relação aos tipos de dados e pode converter automaticamente entre tipos, se for necessário, em vez de usar tipos rígidos por padrão (que também estão disponíveis). Mas o que significa isso? Significa que:

No SQLite, o tipo de dados de um valor está associado ao próprio valor, não ao seu contêiner (no caso, uma coluna de tabela).

Além disso, o sistema de tipos dinâmicos do SQLite é compatível com versões anteriores dos sistemas de tipos estáticos mais comuns de outros mecanismos de banco de dados, no sentido de que as instruções SQL que funcionam em bancos de dados de tipo estaticamente funcionam da mesma maneira no SQLite.

O tipo de dados ANY

Quando o tipo de dados de uma coluna é “ANY“, significa que qualquer tipo de dados – números inteiros, de ponto flutuante, strings ou blobs binários – pode ser inserido nessa tabela e seu valor e tipo de dados serão preservados exatamente como foram inseridos. Atualmente, o SQLite é o único mecanismo de banco de dados SQL que suporta esse recurso.

O comportamento de ANY é ligeiramente diferente em uma tabela STRICT (de tipagem rígida) e em uma tabela comum. Em uma tabela STRICT, uma coluna do tipo ANY sempre preserva os dados exatamente como eles são recebidos. Já em uma tabela comum não estrita, uma coluna do tipo ANY tentará converter strings que se parecem com números em um valor numérico e, se não ocorrerem erros, armazenará o valor numérico em vez da string original.

O que é Afinidade de Tipos

Afinidade de Tipos é um conceito no SQLite de como são associados os tipos de dados de colunas a uma das cinco categorias de tipos que ele suporta internamente, explicadas acima.

Apesar do SQLite ser um banco de dados de tipo dinâmico e permitir a inserção de qualquer tipo de dado em qualquer coluna, ele ainda possui esse sistema de afinidade de tipos que ajuda a interpretar e armazenar os dados de maneira eficiente e consistente.

Para isso algumas regras são definidas, descritas na sequência.

Regras de Afinidade de Tipos no SQLite

Quando uma tabela é criada no SQLite e especificamos os tipos de dados para as colunas, são aplicadas regras de afinidade de tipos para determinar a categoria interna mais adequada. Essas regras são baseadas nos nomes dos tipos de dados fornecidos.

Vejamos algumas regras gerais.

  • INTEGER: Qualquer coluna com “INT” no tipo terá afinidade INTEGER.
  • TEXT: Qualquer coluna com “CHAR”, “VARCHAR”, “CLOB”, ou “TEXT” no tipo terá afinidade TEXT.
  • BLOB: Qualquer coluna com o tipo “BLOB” terá afinidade BLOB.
  • REAL: Qualquer coluna com “REAL”, “FLOAT”, ou “DOUBLE” no tipo terá afinidade REAL.
  • NUMERIC: Qualquer coluna que não se encaixe nas regras acima terá afinidade NUMERIC.

Ao inserir dados em uma coluna, o SQLite tentará converter o valor para o tipo de afinidade da coluna.

Para saber mais e se aprofundar em tipos de dados no SQLite, visite a página da documentação oficial: Tipos de Dados no SQLite.

 

Sobre Fábio dos Reis (1198 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

Escreva um comentário

Seu e-mail não será divulgado


*