Python Brasil
25.7K subscribers
587 photos
11 videos
15 files
3.53K links
Canal para compartilhamento de links, cursos vagas e eventos sobre Python.

Links, contato e freelas: https://linktr.ee/python.brasil

@laenderoliveira
Download Telegram
E como os itens são salvos no Firebase?

Resposta: Recentemente o Firebase lançou uma API para acessar a SDK usando Python, então eu escrevi um item pipeline chamado scrapy-firebase (https://github.com/skhaz/scrapy-firebase) que usa essa API para escrever no banco de dados do Firebase, a cada item coletado do Scrapy, o método process_item (https://github.com/skhaz/scrapy-firebase/blob/master/scrapy_firebase.py#L35) do pipeline é incado, nesse método eu salvo no Firebase.

class FirebasePipeline(BaseItemExporter):

def load_spider(self, spider):
self.crawler = spider.crawler
self.settings = spider.settings

def open_spider(self, spider):
self.load_spider(spider)

configuration = {
'credential': credentials.Certificate(filename),
'options': {'databaseURL': self.settings['FIREBASE_DATABASE']}
}

firebase_admin.initialize_app(**configuration)
self.ref = db.reference(self.settings['FIREBASE_REF'])

def process_item(self, item, spider):
item = dict(self._get_serialized_fields(item))

child = self.ref.child('/'.join([item[key] for key in self.keys]))
child.set(item)
return item



Próximos passos

Ao mesmo tempo em que eu notifico o canal (https://t.me/RegisBittencourt) do Telegram, estou usando o Cloud Natural Language API (https://cloud.google.com/natural-language/) para classificar a notícia, e, em seguida, salvo no BigQuery (https://bigquery.cloud.google.com/). Após algum tempo, acredito que será possível usar o BigQuery para determinar quais trechos, quando e o quê costuma dar mais problemas à rodovia, através de data mining!
RT @PythonJamaica: 🐍🇯🇲 #pyconjamaica2017 🐍🇯🇲
🐍🇯🇲 🐍November 16-18🐍🇯🇲 🐍
🐍🇯🇲 🐍🐍save the date🐍🐍🇯🇲 🐍
👍1
Forwarded from Fernando @ffreitasalves
Oi pessoal, estamos com vagas para Python e Django, presencial aqui em SP na Tikal Tech.

Quem estive interessado, é só se candidatar por esse formulário, mais informações neste link também:

https://tikaltech.typeform.com/to/TcZu1Z
👍1
Forwarded from Letícia Portella
Pessoal, fiz um projetinho com guidelines pra quem quer estudar ciencia de dados
https://github.com/leportella/data-science-roadmap

E pra colocar as empresas no brasil que trabalham e buscam cientista de dados
https://github.com/leportella/data-science-roadmap/blob/master/empresas.md

Por favor, contribuam :)
Novamente a PacktPub está com a seção "Forever Free eBooks". Lá você vai encontrar diversos títulos de graça para sua coleção, dentro das categorias:
- Web Development
- Big Data
- Application Development
- Dev Tools
https://www.packtpub.com/packt/offers/free-learning
Peewee - Um ORM Python minimalista
http://pythonclub.com.br/peewee-um-orm-python-minimalista.html

Peewee (http://peewee.readthedocs.io/en/latest/index.html) é um ORM destinado a criar e gerenciar tabelas de banco de dados relacionais através de objetos Python. Segundo a wikipedia (https://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional), um ORM é:



Mapeamento objeto-relacional (ou ORM, do inglês: Object-relational mapping) é uma técnica de desenvolvimento utilizada para reduzir a impedância da programação orientada aos objetos utilizando bancos de dados relacionais. As tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes.



O que o ORM faz é, basicamente, transformar classes Python em tabelas no banco de dados, além de permitir construir querys usando diretamente objetos Python ao invés de SQL.
O Peewee é destinado a projetos de pequeno/médio porte, se destacando pela simplicidade quando comparado a outros ORM mais conhecidos, como o SQLAlchemy. Uma analogia utilizada pelo autor da API e que acho muito interessante é que Peewee está para o SQLAlchemy assim como SQLite está para o PostgreSQL.
Em relação aos recursos por ele oferecidos, podemos citar que ele possui suporte nativo a SQLite, PostgreSQL e MySQL, embora seja necessário a instalação de drivers para utilizá-lo com PostgreSQL e MySQL e suporta tanto Python 2.6+ quanto Python 3.4+.
Neste tutorial, utilizaremos o SQLite, por sua simplicidade de uso e por não precisar de nenhuma configuração.
Instalação
O Peewee pode ser facilmente instalado com o gerenciador de pacotes pip:
pip install peewee



Criando o banco de dados
Para criar as tabelas é bem simples. Inicialmente passamos o nome do nosso banco de dados (a extensão *.db indica um arquivo do SQLite).
import peewee

db = peewee.SqliteDatabase('codigo_avulso.db')



Diferente de outros bancos de dados que funcionam através um servidor, o SQLite cria um arquivo de extensão *.db, onde todos os nossos dados são armazenados.
DICA: caso deseje ver as tabelas existentes no arquivo codigo_avulso.db, instale o aplicativo SQLiteBrowser. Com ele fica fácil monitorar as tabelas criadas e acompanhar o tutorial.
sudo apt-get install sqlitebrowser



A título de exemplo, vamos criar um banco destinado a armazenar nomes de livros e de seus respectivos autores. Comecemos primeiro com a classe que representa os autores.
import peewee

db = peewee.SqliteDatabase('codigo_avulso.db')

class Author(peewee.Model):
"""
Classe que representa a tabela Author
"""

# A tabela possui apenas o campo 'name', que
# receberá o nome do autor
name = peewee.CharField()

class Meta:
# Indica em qual banco de dados a tabela
# 'author' sera criada (obrigatorio). Neste caso,
# utilizamos o banco 'codigo_avulso.db' criado anteriormente.
database = db



Em seguida, criamos a classe que representa os livros. Ela possui uma relação de "muitos para um" com a tabela de autores, ou seja, cada livro possui apenas um autor, mas um autor pode possuir vários livros.
import peewee

db = peewee.SqliteDatabase('codigo_avulso.db')

class Book(peewee.Model):
"""
Classe que representa a tabela Book
"""

# A tabela possui apenas o campo 'title', que
# receberá o nome do livro
title = peewee.CharField()

# Chave estrangeira para a tabela Author
author = peewee.ForeignKeyField(Author)

class Meta:
# Indica em qual banco de dados a tabela
# 'author' sera criada (obrigatorio). Neste caso,
# utilizamos o banco 'codigo_avulso.db' criado anteriormente.
database = db



Agora, vamos reunir tudo em um único arquivo model.py. Como exemplo, eu criei um arquivo main.py para utilizarmos as classes que acabamos de criar.
import peewee
from model import Author, Book


if __name__ == '__main__':
try:
Author.create_table()
try:
Book.create_table()
except peewee.OperationalError:
print 'Tabela Book ja existe!'



Após executarmos o código, será criado um arquivo de nome codigo_avulso.db no mesmo diretório do nosso arquivo main.py, contendo as tabelas Author e Book. A estrutura do diretório ficou assim:
.
├── codigo_avulso.db
├── main.py
├── model.py



Inserindo dados no banco
Agora, vamos popular nosso banco com alguns autores e seus respectivos livros. Isso pode ser feito de dois modos. Através do método create, quando desejamos inserir um registro apenas; ou pelo método insert_many, quando desejamos inserir vários registros de uma vez em uma mesma tabela.
# Inserimos um autor de nome "H. G. Wells" na tabela 'Author'
author_1 = Author.create(name='H. G. Wells')

book_1 = {
'title': 'A Máquina do Tempo',
'author': author_1,
}

book_2 = {
'title': 'Guerra dos Mundos',
'author': author_1,
}

# Inserimos um autor de nome "Julio Verne" na tabela 'Author'
author_2 = Author.create(name='Julio Verne')

book_3 = {
'title': 'Volta ao Mundo em 80 Dias',
'author': author_2,
}

book_4 = {
'title': 'Vinte Mil Leguas Submarinas',
'author_id': author_1,
}

books = [book_1, book_2, book_3, book_4]

# Inserimos os quatro livros na tabela 'Book'
Book.insert_many(books).execute()



Consultando dados no banco
O Peewee possui comandos destinados a realizar consultas no banco. De maneira semelhante ao conhecido SELECT. Podemos fazer essa consulta de duas maneiras. Se desejamos o primeiro registro que corresponda a nossa pesquisa, podemos utilizar o método get().
book = Book.get(Book.title == "Volta ao Mundo em 80 Dias").get()
book.title



Porém, se desejamos mais de um registro, utilizamos o método select. Por exemplo, para consultar todos os livros escritos pelo autor "H. G. Wells".
books = Book.select().join(Author).where(Author.name=='H. G. Wells')

# Exibe a quantidade de registros que corresponde a nossa pesquisa
print books.count()

for book in books:
book.title

# Resultado:
# * A Máquina do Tempo
# * Guerra dos Mundos
# * Vinte Mil Leguas Submarinas



Também podemos utilizar outras comandos do SQL como limit e group (para mais detalhes, ver a documentação aqui (http://peewee.readthedocs.io/en/latest/index.html)).
Alterando dados no banco
Alterar dados também é bem simples. No exemplo anterior, se observarmos o resultado da consulta dos livros do autor "H. G. Wells", iremos nos deparar com o livro de título "Vinte Mil Léguas Submarinas". Se você, caro leitor, gosta de contos de ficção-científica, sabe que esta obra foi escrito por "Julio Verne", coincidentemente um dos autores que também estão cadastrados em nosso banco. Sendo assim, vamos corrigir o autor do respectivo livro.
Primeiro vamos buscar o registro do autor e do livro:
new_author = Author.get(Author.name == 'Julio Verne')
book = Book.get(Book.title=="Vinte Mil Leguas Submarinas")



Agora vamos alterar o autor e gravar essa alteração no banco.
# Alteramos o autor do livro
book.author = new_author

# Salvamos a alteração no banco
book.save()



Deletando dados do banco
Assim como as operações anteriores, também podemos deletar registros do banco de maneira bem prática. Como exemplo, vamos deletar o livro "Guerra dos Mundos" do nosso banco de dados.
# Buscamos o livro que desejamos excluir do banco
book = Book.get(Book.title=="Guerra dos Mundos")

# Excluimos o livro do banco
book.delete_instance()



Simples não?
Conclusão
É isso pessoal. Este tutorial foi uma introdução bem enxuta sobre o Peewee. Ainda existem muitos tópicos que não abordei aqui, como a criação de primary_key, de campos many2many entre outros recursos, pois foge do escopo deste tutorial. Se você gostou do ORM, aconselho a dar uma olhada também na sua documentação, para conseguir extrair todo o potencial da ferramenta. A utilização de um ORM evita que o desenvolvedor perca tempo escrevendo query SQL e foque totalmente no desenolvimento de código.
O Peewee também possui suporte ao flamework flask, então dependendo do tamanho do projeto, pode ser uma alternativa interessante no lugar de ORM mais complexos como o SQLAlchemy.
É isso pessoal. Obrigado pela leitura e até o próximo tutorial!
Referências
Documentação do Peewee (em inglês) (http://peewee.readthedocs.io/en/latest/index.html)
An Intro to peewee – Another Python ORM (https://www.blog.pythonlibrary.org/2014/07/17/an-intro-to-peewee-another-python-orm/)
Introduction to peewee (http://jonathansoma.com/tutorials/webapps/intro-to-peewee/)
Introdução à Linguagem SQL (https://www.novatec.com.br/livros/introducao-sql/)
http://blog.dunderlabs.com/django-boilerplate-a-estrutura-de-projeto-django-que-tenho-usado.html
Vamos falar sobre estruturas de projeto Django? E esse é pra ser o primeiro de uma série sobre Django, pra quem sabe servir como ajuda pra quem tiver iniciando. Todo feedback é super bem vindo :D
Este ano, a PythonBrasil[13] conta com 16 palestras ministradas por mulheres. Destas, 13 ministradas por PyLadies ativas em suas comunidades locais. E este número ainda pode aumentar já que a conferência ainda está confirmando a sua grade do evento! Como no ano passado, estamos lançando uma campanha de apoio financeiro para ajudar as PyLadies que de outra maneira não poderiam comparecer ao evento. Qualquer ajuda é muito bem vinda <3 Se não puder ajudar financeiramente, ajude compartilhando essa mensagem <3 Vamos ajudar a aumentar a visibilidade das mulheres na tecnologia! https://www.catarse.me/pyladies_na_pythonbrasil_13?ref=project_link
Confirmada a palestra "Análise de imagens e machine learning utilizando Python e openCV" - Paula Santos #pybr13https://t.co/FIc4oLKvTA