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