[python-win32] Dict, List and Com Object...oh my!

Person, Roderick personrp at UPMC.EDU
Fri Jul 31 12:53:28 CEST 2009


>Not really a pywin32 related by I will bite :)
>For every iteration of the while loop you have to create a new
>dictionary,  fill it up with data and append to the list.

I posted here because this has never happened to me before, only with the  COM object thrown in does it do this.
So I assumed it was some kind of windows COM issue.

>>
>> here is that portion of the code:
>>
>>    prv640_records = []
>>    while not rtn.EOF:
>>    prv640_dic = {}
>>      prv640_dict['promise_id'] = rtn.Fields.Item('promise_id').Value
>>      prv640_dict['service_location'] = rtn.Fields.Item('service_location').Value
>>      prv640_dict['mco_code'] = rtn.Fields.Item('subnetwork_id').Value
>>      prv640_dict['begin_date'] = rtn.Fields.Item('begin_date').Value
>>      prv640_dict['end_date'] = rtn.Fields.Item('end_date').Value
>>      prv640_dict['mco_prov_number'] = rtn.Fields.Item('provider_id').Value
>>      prv640_dict['action'] = rtn.Fields.Item('STATUS').Value
>>
>>      rtn.MoveNext()
>>      prv640_records.append(prv640_dict)
>>

I made this work by adding prv640_dict = None after the list append.


>It really is the same dictionary referenced 402 times.
>In a debugger  type
>>> id(prv640_records[0]), d(prv640_records[1])

>It will display two identical identifiers.

As soon as I get in the office I will check this out.

>Also I would recommend using adodbapi or pyodbc module for talking to
>SQL Server.
>adodbapi is already included in pywin32 distribution.
>The API of both those extensions follow DBAPI 2
>http://www.python.org/dev/peps/pep-0249/
>Much nicer IMHO.

I looked at this a few years ago but for me it was easier to use COM with 
stored procedures, but I will look at it again.

Thanks

Rod

Waldemar


More information about the python-win32 mailing list