Dictionary from sqlite3.Row and PyCharm unresolved reference

Peter Otten __peter__ at web.de
Fri Feb 13 06:33:22 EST 2015


Mario Figueiredo wrote:

> Currently i'm using the following code to transform a row fetched from an
> sqlite database into a dictionary property:

class Unknown:

>     def __init__(self, id_):
>         self.id = id_
>         self.data = None
>         ...
>         conn = sqlite3.connect('data')
>         conn.row_factory = sqlite3.Row
>         row = conn.execute(query, {'id': str(id_)}).fetchone()
>         conn.close()
> 
>         if row:
>             self.data = dict(zip(row.keys(), tuple(row)))
> 
> I have two questions:
> 
>   1. Is this an acceptable idiom for the construction of self.data
>   dictionary,
>       or do I have a better and more readable option?

If sqlite3.Row is not dict-like enough to use it directly

self.data = row

you can either convert the Row object with

self.data = dict(row)

or use the recipe for a row factory provided in the documentation at 

https://docs.python.org/dev/library/sqlite3.html#sqlite3.Connection.row_factory

that constructs a dict directly.

And now an unsolicited remark: if you have more than one instance of Unknown 
you might read the data outside the initialiser or at least keep the 
connection open and pass a connection or cursor object to the initialiser.




More information about the Python-list mailing list