Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

More general way of generating PyODBC queries as a dict?

15 views
Skip to first unread message

stackover...@gmail.com

unread,
May 21, 2013, 1:27:07 PM5/21/13
to
Here are my averagely general class methods for creating a dictionary from the result of database queries:

def make_schema_dict(self):
schema = [i[2] for i in self.cursor.tables()
if i[2].startswith('tbl_') or i[2].startswith('vw_')]

self.schema = {table: {'scheme': [row.column_name for row
in self.cursor.columns(table)]}
for table in schema}

def last_table_query_as_dict(self, table):
return {'data': [{col: row.__getattribute__(col) for col in self.schema[table]['scheme']
if col != 'RowNum'} for row in self.cursor.fetchall()]}
Unfortunately as you can see, there are many complications.

For example, when multiple tables are queried; some hackish lambdas are required to generate the resulting dictionary.

Can you think of some more general methods?

(and yes I know this is against the PEP; and that this is also on SO)
Message has been deleted

stackover...@gmail.com

unread,
May 22, 2013, 5:31:57 AM5/22/13
to
On Wednesday, May 22, 2013 9:33:18 AM UTC+10, Dennis Lee Bieber wrote:
> On Tue, 21 May 2013 10:27:07 -0700 (PDT), stackover...@gmail.com
>
> declaimed the following in gmane.comp.python.general:
>
>
>
> >
>
> > For example, when multiple tables are queried; some hackish lambdas are required to generate the resulting dictionary.
>
> >
>
> > Can you think of some more general methods?
>
> >
>
> What about using the information from
>
>
>
> cursor.description
>
>
>
> You did state PyODBC, did you not?
>
>
>
> """
>
> description
>
>
>
> This read-only attribute is a list of 7-item tuples, each containing
>
> (name, type_code, display_size, internal_size, precision, scale,
>
> null_ok). pyodbc only provides values for name, type_code,
>
> internal_size, and null_ok. The other values are set to None.
>
> """
>
> --
>
> Wulfraed Dennis Lee Bieber AF6VN
>
> wlf...@ix.netcom.com HTTP://wlfraed.home.netcom.com/

YAY: `[{c[0]: v for (c, v) in zip(row.cursor_description, row)} for row in self.cursor.fetchall()]`
0 new messages