Loading select queries into objects

piet at cs.uu.nl piet at cs.uu.nl
Mon Jun 18 15:46:22 CEST 2001


>>>>> "Graham Ashton" <graham at coms.com> (GA) writes:

GA> Hi. I've just started playing with database access from Python and have
GA> stumbled across yet another hole in my knowledge of Python idioms.

GA> I've got a class that has an attribute for each column in a database
GA> table, and an accessor method that sets the value of each attribute. I
GA> then populate the attributes with the result of a database query.

GA> Here's an example:

GA>     query = """
GA>         SELECT column1, column2, some_column
GA>           FROM a_table
GA>     """

GA>     cursor = self.db.cursor()
GA>     cursor.execute(query)
GA>     tup = cursor.fetchone()

GA>     self.column1(tup[0])		# this could be better!
GA>     self.column2(tup[1])
GA>     self.some_column(tup[2])

GA> What I'm wondering is; is there an idiomatic way of applying the values
GA> in a tuple to a list of functions? In Perl I'd use map(), but I'm not
GA> sure if there's a "cleaner" way in Python.

If you can use map in Perl, you can use map in Python. But I don't think
this problem can be solved easily with map, because map applies a single
function to a sequence, not a list of functions to a sequence.

That is, if I understand how you want to do it:
        The list of functions is [f0, f1, f2] and you want:
        f0(tup[0])
        f1(tup[1])
        f2(tup[2])

You could do something like:
funlist = (self.column1, self.column2, self.some_column)

for i in range (len(funlist)):
        apply(funlist[i],(tup[i],))

or use zip.
-- 
Piet van Oostrum <piet at cs.uu.nl>
URL: http://www.cs.uu.nl/~piet [PGP]
Private email: P.van.Oostrum at hccnet.nl



More information about the Python-list mailing list