On Thu, Jul 30, 2009 at 11:20 AM, Person, Roderick<perso...@upmc.edu> wrote:
> I'm connecting to a MS SQL 2005 database using ADO com objects and getting a 
> dataset from a stored procedure -- Works great.
>
> I'm placing that dataset into a dictionary -- works.
> I'm placing that dictionary into a list -- problem!! When I move to the next 
> record in the dataset and place the dictionary created from that into the 
> list all the members that are in the list change to that record.

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.

>
> 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)
>
> So the first time through the while loop, prv640_records will contain one 
> dictionary that is the first record in rtn. The second time through the loop 
> prv640_records will contain 2 dictionaries that are both the 2nd record in 
> rtn. The first dictionary in prv640_records is somehow replaced.
>
> So in testing this with a record set of 402 records, at the end of the while 
> loop, the list prv640_records will contain 402 dictionaries that are all the 
> last record of rtn.
>

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.

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.

Waldemar
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to