POO

Persistência de Objetos

Roteiro

Arquivos:

  • Manipulação de arquivos
  • Persistência de objetos em arquivos

 

Banco de Dados:

  • Acesso a banco de dados
  • Persistência de objetos em bancos de dados

Manipulação de Arquivos

Adicionar conteúdo a arquivo:

arq = open('/tmp/lista.txt', 'w')
texto = """
Lista de Alunos
---
Adriel Higor Rodrigues Lins da Silva
Ana Beatriz Ferreira Lira
Aquilla Maria Almeida
Brena Ellen Feitoza Marques
"""
arq.write(texto)
arq.close()
arq = open('/tmp/lista.txt', 'w')
texto = []
texto.append('Lista de Alunos\n')
texto.append('---\n')
texto.append('João da Silva\n')
texto.append('José Lima\n')
texto.append('Maria das Dores')
arq.writelines(texto)
arq.close()

ou

Manipulação de Arquivos

Leitura de arquivos:

arq = open('/tmp/lista.txt', 'r')
texto = arq.read()
print(texto)
arq.close()
arq = open('/tmp/lista.txt', 'r')
texto = arq.readlines()
for linha in texto :
    print(linha)
arq.close()

ou

Persistindo objetos em arquivos

pessoas = []
p1 = Pessoa(1, "Diego", 30)
pessoas.append(p1.__dict__)
p2 = Pessoa(2, "Joao", 30)
pessoas.append(p2.__dict__)

arq = open("/tmp/objetos.json", 'w')
arq.write(json.dumps(pessoas))
arq.close()
arq = open("/tmp/objetos.json", 'r')
pessoas = json.load(arq)

for pessoa in pessoas:
    print(pessoa)

Escrevendo objetos em arquivo:

Lendo Objetos de arquivo:

Persistindo objetos em bancos de dados

import sqlite3

def persistir():
    conn = sqlite3.connect('banco.db')
    c = conn.cursor()

    c.execute('''CREATE TABLE IF NOT EXISTS pessoa
                 (id int, nome text, idade int)''')

    c.execute("INSERT INTO pessoa VALUES (2,'Diego',30)")

    conn.commit()
    conn.close()

Lendo objetos de bancos de dados

import sqlite3

def ler():
    conn = sqlite3.connect('banco.db')
    c = conn.cursor()
    c = conn.cursor()
    id = '1'
    c.execute('SELECT * FROM pessoa WHERE id=?', id)
    print(c.fetchone())

Exercícios

Pickles e Shelves

  • Python disponibiliza três bibliotecas padrões para persistência de objetos:
  • ​Pickle
    • Converte objetos de/para String para Bytes
  • DBM
    • Implementa um armazenamento baseado em chave de acesso para guardar Strings
  • ​​Shelve
    • Usa os módulos anteriores para guardar objetos Python num arquivo pelo ID

 

Persistindo com Shelves

  • Salvando objetos:
from person import Person, Manager
bob = Person('Bob Smith')
sue = Person('Sue Jones', job='dev', pay=100000) 
tom = Manager('Tom Jones', 50000)

import shelve
db = shelve.open('persondb') 
for obj in (bob, sue, tom):
    db[obj.name] = obj 
db.close()

Persistindo com Shelves

  • Lendo objetos:
>>> import shelve
>>> db = shelve.open('persondb')
>>> len(db)
3
>>> list(db.keys())
['Sue Jones', 'Tom Jones', 'Bob Smith']
>>> bob = db['Bob Smith']
>>> bob
[Person: job=None, name=Bob Smith, pay=0]
>>> bob.lastName() 'Smith'

Persistindo com Postgres

  • Persistindo:
conexao = psycopg2.connect("host=localhost dbname=exemplo user=postgres password=secret")
cursor = conexao.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS pessoa
               (id int PRIMARY KEY, nome text, idade int)''')
cursor.execute("INSERT INTO pessoa VALUES (1,'Diego',30)")
self.conexao.commit()
  • Lendo:
conexao = psycopg2.connect("host=localhost dbname=exemplo user=postgres password=secret")
cursor = conexao.cursor()
cursor.execute('SELECT * FROM pessoa WHERE id=%s', ('1',))
print(cursor.fetchone())

POO-Persistencia

By diegoep

POO-Persistencia

  • 529