Hello,
I'm still working on my profiles with points etc.
Now I am facing a problem with my da.SearchCursor. While it was working well with my original tables, it is not respecting my where_clause any longer since I reduced the tables to the attributes I actually need.
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">store_table</SPAN><SPAN class="punctuation token">(</SPAN>table<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"open "</SPAN><SPAN class="operator token">+</SPAN>table<SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#get field names</SPAN>
desc <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Describe<SPAN class="punctuation token">(</SPAN>table<SPAN class="punctuation token">)</SPAN>
fieldnames<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">[</SPAN>field<SPAN class="punctuation token">.</SPAN>name<SPAN class="punctuation token">.</SPAN>encode<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"utf-8"</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> field <SPAN class="keyword token">in</SPAN> desc<SPAN class="punctuation token">.</SPAN>fields<SPAN class="punctuation token">]</SPAN>
<SPAN class="comment token">#get profile numbers</SPAN>
profile_nrs<SPAN class="operator token">=</SPAN>unique_values<SPAN class="punctuation token">(</SPAN>table<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"Profile No"</SPAN><SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN>profile_nrs<SPAN class="punctuation token">)</SPAN>
tablefile<SPAN class="operator token">=</SPAN>location_for_tables<SPAN class="operator token">+</SPAN><SPAN class="string token">"\\"</SPAN><SPAN class="operator token">+</SPAN>table <SPAN class="comment token">#modified table</SPAN>
<SPAN class="comment token"># Select rows by station nr and save to txt file</SPAN>
<SPAN class="keyword token">for</SPAN> profile <SPAN class="keyword token">in</SPAN> profile_nrs<SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">if</SPAN> profile <SPAN class="keyword token">is</SPAN> <SPAN class="operator token">not</SPAN> None <SPAN class="operator token">and</SPAN> profile<SPAN class="operator token">!=</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">:</SPAN>
expression<SPAN class="operator token">=</SPAN><SPAN class="string token">"'Profile No'='"</SPAN><SPAN class="operator token">+</SPAN>str<SPAN class="punctuation token">(</SPAN>profile<SPAN class="punctuation token">)</SPAN><SPAN class="operator token">+</SPAN><SPAN class="string token">"'"</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN>expression<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">with</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>SearchCursor<SPAN class="punctuation token">(</SPAN>table<SPAN class="punctuation token">,</SPAN><SPAN class="string token">"*"</SPAN><SPAN class="punctuation token">,</SPAN>where_clause<SPAN class="operator token">=</SPAN>expression<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">as</SPAN> sCursor<SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">for</SPAN> sRow <SPAN class="keyword token">in</SPAN> sCursor<SPAN class="punctuation token">:</SPAN>
table_name<SPAN class="operator token">=</SPAN>str<SPAN class="punctuation token">(</SPAN>sRow<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="operator token">+</SPAN><SPAN class="string token">"_"</SPAN><SPAN class="operator token">+</SPAN>str<SPAN class="punctuation token">(</SPAN>sRow<SPAN class="punctuation token">[</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="operator token">+</SPAN><SPAN class="string token">"_.txt"</SPAN> <SPAN class="comment token">#Campaign + Profile_No</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"table_name="</SPAN><SPAN class="operator token">+</SPAN>table_name<SPAN class="punctuation token">)</SPAN>
filepath<SPAN class="operator token">=</SPAN>DirOutTables <SPAN class="operator token">+</SPAN><SPAN class="string token">"\\"</SPAN><SPAN class="operator token">+</SPAN> table_name <SPAN class="comment token">#seperated tables</SPAN>
UIDvalue<SPAN class="operator token">=</SPAN>str<SPAN class="punctuation token">(</SPAN>sRow<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="operator token">+</SPAN><SPAN class="string token">"_"</SPAN><SPAN class="operator token">+</SPAN>str<SPAN class="punctuation token">(</SPAN>sRow<SPAN class="punctuation token">[</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
UIDGraphValue<SPAN class="operator token">=</SPAN>UIDvalue<SPAN class="operator token">+</SPAN><SPAN class="string token">"_"</SPAN>
<SPAN class="keyword token">break</SPAN>
<SPAN class="keyword token">if</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Exists<SPAN class="punctuation token">(</SPAN>filepath<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Table "</SPAN><SPAN class="operator token">+</SPAN>table_name<SPAN class="operator token">+</SPAN><SPAN class="string token">" exists"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">with</SPAN> open<SPAN class="punctuation token">(</SPAN>tablefile<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'r'</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">as</SPAN> t<SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">with</SPAN> open<SPAN class="punctuation token">(</SPAN>filepath<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'a'</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">as</SPAN> f<SPAN class="punctuation token">:</SPAN>
w <SPAN class="operator token">=</SPAN> csv<SPAN class="punctuation token">.</SPAN>writer<SPAN class="punctuation token">(</SPAN>f<SPAN class="punctuation token">,</SPAN> delimiter<SPAN class="operator token">=</SPAN><SPAN class="string token">"\t"</SPAN><SPAN class="punctuation token">,</SPAN> lineterminator<SPAN class="operator token">=</SPAN><SPAN class="string token">'\n'</SPAN><SPAN class="punctuation token">)</SPAN>
r <SPAN class="operator token">=</SPAN> csv<SPAN class="punctuation token">.</SPAN>reader<SPAN class="punctuation token">(</SPAN>t<SPAN class="punctuation token">,</SPAN> delimiter<SPAN class="operator token">=</SPAN><SPAN class="string token">"\t"</SPAN><SPAN class="punctuation token">)</SPAN>
allnewtable<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
theader<SPAN class="operator token">=</SPAN>r<SPAN class="punctuation token">.</SPAN>next<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
theader<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'UID'</SPAN><SPAN class="punctuation token">)</SPAN>
theader<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'UIDGraph'</SPAN><SPAN class="punctuation token">)</SPAN>
allnewtable<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN>theader<SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN>theader<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">for</SPAN> sRow <SPAN class="keyword token">in</SPAN> sCursor<SPAN class="punctuation token">:</SPAN>
sRowNew<SPAN class="operator token">=</SPAN>sRow <SPAN class="operator token">+</SPAN> <SPAN class="punctuation token">(</SPAN>UIDvalue<SPAN class="punctuation token">,</SPAN>UIDGraphValue<SPAN class="punctuation token">)</SPAN>
allnewtable<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN>sRowNew<SPAN class="punctuation token">)</SPAN>
w<SPAN class="punctuation token">.</SPAN>writerows<SPAN class="punctuation token">(</SPAN>allnewtable<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">del</SPAN> sRow
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Table "</SPAN><SPAN class="operator token">+</SPAN>table_name<SPAN class="operator token">+</SPAN><SPAN class="string token">" created"</SPAN><SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Table "</SPAN><SPAN class="operator token">+</SPAN>table_name<SPAN class="operator token">+</SPAN><SPAN class="string token">" created"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"empty line"</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></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>
In my test file I have 4 profiles in profile_nrs and with each loop through "for profile in profile_nrs" the expression is iterated correctly. But obviously the where_clause is not respected because sRow[3] is always 1. Also when I hard-code the expression with where_clause="'Profile_No'='4'" it still gives me back the whole table.
I thought maybe I used the sCursor already in another part of the script but that's not the case.
I tried the expression without putting the number in quotation marks but then it's not a valid sql expression it says.
There is no error message and the script runs through up to the end, with the only mistake that it creates only one table instead of four.
Do you have an idea what goes wrong?
Thanks in advance!