<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Eliezer Rodrigues &#187; persistência</title>
	<atom:link href="http://www.eliezer.com.br/post/tag/persistencia/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.eliezer.com.br</link>
	<description>Desenvolvimento de software, linguagens de programação, artigos, utils, scrum, testes, linux e tecnologia de um modo geral</description>
	<lastBuildDate>Thu, 08 Apr 2010 12:42:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Persistência em Python com módulo Shelve</title>
		<link>http://www.eliezer.com.br/post/persistencia-em-python-com-modulo-shelve/</link>
		<comments>http://www.eliezer.com.br/post/persistencia-em-python-com-modulo-shelve/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 06:41:53 +0000</pubDate>
		<dc:creator>eliezer</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[persistência]]></category>

		<guid isPermaLink="false">http://www.eliezer.com.br/?p=21</guid>
		<description><![CDATA[Uma das coisa que atualmente mais acho legal em programação é Python. É muito bem documentado, simples e rápido. Em um projeto open source que estou parcipando, o Peanut [Explico melhor em um outro post ], tive que persistir uma configuração do software, e com isso veio a possibilidade de utilizar o módulo shelve do [...]]]></description>
			<content:encoded><![CDATA[<p>Uma das coisa que atualmente mais acho legal em programação é Python. É muito bem documentado, simples e rápido. Em um projeto open source que estou parcipando, o Peanut [Explico melhor em um outro post <img src='http://www.eliezer.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ], tive que persistir uma configuração do software, e com isso veio a possibilidade de utilizar o módulo shelve do python.</p>
<p>O shelve foi criado para trabalhar com persistência de dicionários (dict) python em arquivo. Para operações simples, configuração, dados não muito grandes, é perfeito. Sua chave sempre deve ser uma string.</p>
<p>Como a maioria dos módulos em python, é tudo muito simples:</p>
<p><strong>Exemplo 1: Vamos salvar uma lista de e-mail em um arquivo</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">shelve</span>
emails = <span style="color: #dc143c;">shelve</span>.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'emails.db'</span><span style="color: black;">&#41;</span>
&nbsp;
emails<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;maria&quot;</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;exemplo@maria.com.br&quot;</span>
emails<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;joao&quot;</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;exemplo@joao.com.br&quot;</span>
&nbsp;
emails.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Recuperando os e-mails</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">shelve</span>
emails = <span style="color: #dc143c;">shelve</span>.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'emails.db'</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> emails<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;maria&quot;</span><span style="color: black;">&#93;</span>
&nbsp;
emails.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p><br/><strong>Exemplo 2: Persistência de um objeto mais completo</strong></p>
<p>Criação de um objeto simples</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">class</span> Profile<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
   <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, name, <span style="color: #008000;">type</span>, username, password=<span style="color: #008000;">None</span>, auto_login=<span style="color: #483d8b;">'off'</span><span style="color: black;">&#41;</span>:
   <span style="color: #008000;">self</span>.<span style="color: black;">name</span> = name
   <span style="color: #008000;">self</span>.<span style="color: #008000;">type</span> = <span style="color: #008000;">type</span>
   <span style="color: #008000;">self</span>.<span style="color: black;">username</span> = username
   <span style="color: #008000;">self</span>.<span style="color: black;">password</span> = password
   <span style="color: #008000;">self</span>.<span style="color: black;">auto_login</span> = auto_login</pre></td></tr></table></div>

<p>Classe util para acesso a shelve</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">shelve</span>
<span style="color: #ff7700;font-weight:bold;">class</span> Db<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
    <span style="color: #008000;">self</span>.__db = <span style="color: #dc143c;">shelve</span>.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;profiles.db&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> close<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
    <span style="color: #008000;">self</span>.__db.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> add<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, <span style="color: #dc143c;">profile</span><span style="color: black;">&#41;</span>:
    <span style="color: #008000;">self</span>.__db<span style="color: black;">&#91;</span><span style="color: #dc143c;">profile</span>.<span style="color: black;">name</span><span style="color: black;">&#93;</span> = <span style="color: #dc143c;">profile</span><span style="color: #66cc66;">;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> size<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.__db<span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> find_all<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.__db.<span style="color: black;">values</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> get<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, key<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.__db<span style="color: black;">&#91;</span>key<span style="color: black;">&#93;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> get_first<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.__db.<span style="color: black;">keys</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Inserindo um perfil</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">db = Db<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
db.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">profile</span> = Profile<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;maria&quot;</span>, <span style="color: #483d8b;">&quot;user&quot;</span>, <span style="color: #483d8b;">&quot;mariazinha&quot;</span>, <span style="color: #483d8b;">&quot;123&quot;</span><span style="color: black;">&#41;</span>
db.<span style="color: black;">add</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">profile</span><span style="color: black;">&#41;</span>
db.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.eliezer.com.br/post/persistencia-em-python-com-modulo-shelve/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
