DB_FIRST moves the cursor to the first entry in the database.&nbsp; It looks like you want to do cur.pget(&#39;letter&#39;, db.DB_SET).<br><br><br>
<div class="gmail_quote">On Tue, Dec 2, 2008 at 12:46 PM, <a href="mailto:denis.papathanasiou@gmail.com">denis.papathanasiou@gmail.com</a> <span dir="ltr">&lt;<a href="mailto:denis.papathanasiou@gmail.com">denis.papathanasiou@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">I&#39;ve got a simple hash saved as a Berkeley DB file.<br><br>The keys are: [&#39;a&#39;, &#39;b&#39;, &#39;0&#39;, &#39;c&#39;, &#39;1&#39;, &#39;d&#39;, &#39;2&#39;] and the values are:<br>
[&#39;letter&#39;, &#39;letter&#39;, &#39;number&#39;, &#39;letter&#39;, &#39;number&#39;, &#39;letter&#39;, &#39;number&#39;].<br><br>I created the db with a secondary index, so that I can lookup by value,<br>e.g. call pget(&#39;letter&#39;) and get a list of [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;] as the<br>
result.<br><br>Except, it doesn&#39;t work; in that example, pget(&#39;letter&#39;) returns just &#39;a&#39;.<br><br>Then I read in the Oracle docs that secondary indices with duplicates<br>need to use the cursor form of pget().<br>
<br>But when I tried that, I got back the entire db.<br><br>Any suggestions?<br><br>Or are there examples of using the cursor form of pget() in bsddb3 I<br>could look at?<br><br>Here&#39;s my code:<br><br>from bsddb3 import db<br>
<br>pdb_object = db.DB()<br>pdb_object.open(&quot;alphanumeric.db&quot;, None, db.DB_BTREE, db.DB_CREATE)<br>sdb_object = db.DB()<br>sdb_object.set_flags(db.DB_DUP | db.DB_DUPSORT)<br>sdb_object.open(&quot;alphanumeric_secondary.db&quot;, None, db.DB_BTREE,<br>
db.DB_CREATE)<br>pdb_object.associate(sdb_object, (lambda primary_key, primary_data:<br>primary_data))<br><br>pdb_object[&#39;a&#39;] = &#39;letter&#39;<br>pdb_object[&#39;b&#39;] = &#39;letter&#39;<br>pdb_object[&#39;0&#39;] = &#39;number&#39;<br>
pdb_object[&#39;c&#39;] = &#39;letter&#39;<br>pdb_object[&#39;1&#39;] = &#39;number&#39;<br>pdb_object[&#39;d&#39;] = &#39;letter&#39;<br>pdb_object[&#39;2&#39;] = &#39;number&#39;<br><br># call pget():<br><br>&gt;&gt;&gt; sdb_object.pget(&#39;letter&#39;)<br>
(&#39;a&#39;, &#39;letter&#39;)<br># returns just one value, not all of them...<br><br><br># call pget() with a cursor:<br><br>cur = sdb_object.cursor()<br>rec = cur.pget(&#39;letter&#39;, db.DB_FIRST)<br>&gt;&gt;&gt; rec<br>
(&#39;letter&#39;, &#39;a&#39;, &#39;letter&#39;)<br># so far so good...<br><br>&gt;&gt;&gt; while rec:<br>... &nbsp; rec = cur.pget(&#39;letter&#39;, db.DB_NEXT)<br>... &nbsp; rec<br>...<br>(&#39;letter&#39;, &#39;b&#39;, &#39;letter&#39;)<br>
(&#39;letter&#39;, &#39;c&#39;, &#39;letter&#39;)<br>(&#39;letter&#39;, &#39;d&#39;, &#39;letter&#39;)<br>(&#39;number&#39;, &#39;0&#39;, &#39;number&#39;)<br>(&#39;number&#39;, &#39;1&#39;, &#39;number&#39;)<br>(&#39;number&#39;, &#39;2&#39;, &#39;number&#39;)<br>
<br># why were &#39;number&#39; types returned? It looks like the pget() key was<br>ignored...<br><br>_______________________________________________<br>pybsddb mailing list<br><a href="mailto:pybsddb@argo.es">pybsddb@argo.es</a><br>
<a href="http://mailman.argo.es/listinfo/pybsddb" target="_blank">http://mailman.argo.es/listinfo/pybsddb</a><br><a href="http://www.argo.es/~jcea/programacion/pybsddb.htm" target="_blank">http://www.argo.es/~jcea/programacion/pybsddb.htm</a><br>
</blockquote></div><br>