Recentemente comecei a desenvolver um pequeno projeto que precisaria de um pequeno banco de dados, realmente pequeno: os registros seriam dicionários com duas ou três propriedades, algo como:
{
foo: bar,
zig: bee,
created_at: sometime
}
Porém, desta vez não queria subir um banco de dados dentro de um container docker, por questões de economia de recurso: a aplicação por já consumiria as máquinas que o always free tier da Oracle Cloud disponibiliza.
Sendo assim, fui dar uma olhada para os outros recursos fornecidos pela Oracle, e entre eles, achei o Autonomous JSON Database, que entrega 20GB de armazenamento (não é muito, mas é 0800 :D) e acabei escolhendo como parte da stack do projetinho.
Criando o Banco de Dados
A criação é bem simples, no painel do OCI: Menu > Oracle Database > Autonomous JSON Database, em seguida basta clicar no botão de criação.
Realizando a conexão via código
A conexão via código deixa a desejar, é necessário fazer instalação de libs via pip, instalação de libs no Sistema Operacional, além de algumas configurações no Banco de Dados.
Permitindo conexões via TLS.
Primeiro é necessário permitir conexões TLS no Banco de dados:
Em seguida copie a string de conexão como TLS
Instalando dependências
Instale a biblioteca Python necessária:
pip install oracledb
Instale as bibliotecas no Sistema Operacional seguindo a documentação da Oracle (infelizmente para a maioria das distribuições em Linux a biblioteca não é disponibilizado em um gerenciador de pacotes)
Realize a conexão via código:
import oracledb
from settings import app_settings
class Database:
def __init__(self) -> None:
self.connection = oracledb.connect(
user=app_settings.oci_database_user,
password=app_settings.oci_database_password,
dsn=app_settings.oci_database_connection_string,
encoding=app_settings.oci_encoding
)
def get(self):
cur = self.connection.cursor()
cur.execute("select sysdate from dual")
res = cur.fetchall()
for row in res:
print(row)
cur.close()
A execução desde código deverá ter sucesso:
$ python3 main.py
(datetime.datetime(2022, 10, 14, 6, 29, 36),)
Top comments (0)