I have a related table I'm querying based on a date field but I want to include the attributes from the feature it is related to. Any ideas?
I would suggest reading the tables into a couple of dictionaries, using a process similar to what is described in Richard Fairhurst's blog: Turbo Charging Data Manipulation with Python Cursors and Dictionaries.
One way would be:
<SPAN class="keyword token">import</SPAN> arcpy relatedTbl <SPAN class="operator token">=</SPAN> r<SPAN class="string token">"C:\Path\to\file.gdb\InspectionHistory"</SPAN> relatedFields <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">'OBJECTID'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'IDENTIFIER'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'ESTABLISHMENTNAME'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'CITY'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'INSPDATE'</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="comment token"># IDENTIFIER is the key field and second in field list</SPAN> relatedWhere <SPAN class="operator token">=</SPAN> <SPAN class="string token">"INSPDATE BETWEEN DATE '2017-09-01' AND DATE'2017-10-01'"</SPAN> <SPAN class="comment token"># dictionary in format {'ITEMID': ('IDENTIFIER', 'ITEM1', 'ITEM2', ...), ...}</SPAN> relatedDict <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN>r<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">(</SPAN>r<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> r <SPAN class="keyword token">in</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>SearchCursor<SPAN class="punctuation token">(</SPAN>relatedTbl<SPAN class="punctuation token">,</SPAN> relatedFields<SPAN class="punctuation token">,</SPAN> where_clause<SPAN class="operator token">=</SPAN>relatedWhere<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">}</SPAN> <SPAN class="comment token"># print relatedDict</SPAN> <SPAN class="comment token"># get a list of keys for parent where clause: v[0] = IDENTIFIER</SPAN> keyList <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">for</SPAN> k<SPAN class="punctuation token">,</SPAN> v <SPAN class="keyword token">in</SPAN> relatedDict<SPAN class="punctuation token">.</SPAN>iteritems<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="comment token"># print k, v[0]</SPAN> keyList<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN>v<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN> parentFC <SPAN class="operator token">=</SPAN> r<SPAN class="string token">"C:\Path\to\file.gdb\RestaurantInspections"</SPAN> parentFields <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">'IDENTIFIER'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'OBJECTID'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'ESTABLISHMENTNAME'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'CITY'</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="comment token"># IDENTIFIER is the key field and is first in field list</SPAN> parentWhere <SPAN class="operator token">=</SPAN> <SPAN class="string token">"IDENTIFIER IN ('{}')"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"','"</SPAN><SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>set<SPAN class="punctuation token">(</SPAN>keyList<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># assuming IDENTIFIER is string, using ' -- omit for numeric key</SPAN> <SPAN class="keyword token">print</SPAN> parentWhere <SPAN class="comment token"># dictionary in format {'IDENTIFIER': ('ITEM1', 'ITEM2', ...), ...}</SPAN> parentDict <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN>r<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">(</SPAN>r<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> r <SPAN class="keyword token">in</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>SearchCursor<SPAN class="punctuation token">(</SPAN>parentFC<SPAN class="punctuation token">,</SPAN> parentFields<SPAN class="punctuation token">,</SPAN> where_clause<SPAN class="operator token">=</SPAN>parentWhere<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">}</SPAN> <SPAN class="comment token"># print combined results</SPAN> <SPAN class="keyword token">for</SPAN> k<SPAN class="punctuation token">,</SPAN> v <SPAN class="keyword token">in</SPAN> relatedDict<SPAN class="punctuation token">.</SPAN>iteritems<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">print</SPAN> k<SPAN class="punctuation token">,</SPAN> v<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> v<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> v<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> v<SPAN class="punctuation token">[</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> parentDict<SPAN class="punctuation token">[</SPAN>v<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> parentDict<SPAN class="punctuation token">[</SPAN>v<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> parentDict<SPAN class="punctuation token">[</SPAN>v<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Signed in members can post, follow updates, and more. New here? Register a free account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.