I’m using Python 2.7 and postgresql 9.1. Trying to get dictionary from query, I’ve tried the code as described here: http://wiki.postgresql.org/wiki/Using_psycopg2_with_PostgreSQL
import psycopg2 import psycopg2.extras conn = psycopg2.connect("dbname=mydb host=localhost user=user password=password") cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) cur.execute ("select * from port") type(cur.fetchall())
It is printing the next answer:
<type 'list'>
printing the item itself, show me that it is list. The excepted answer was dictionary.
Edit:
Trying the next:
ans = cur.fetchall()[0] print ans print type(ans)
returns
[288, 'T', 51, 1, 1, '192.168.39.188'] <type 'list'>
Advertisement
Answer
If you don’t want to use a psycopg2.extras.DictCursor
you can create a list of dictionaries for the results using cursor.description
:
# connect connection = psycopg2.connect() cursor = connection.cursor() # query cursor.execute("SELECT * FROM myTable") # transform result columns = list(cursor.description) result = cursor.fetchall() # make dict results = [] for row in result: row_dict = {} for i, col in enumerate(columns): row_dict[col.name] = row[i] results.append(row_dict) # display print(result)
I use the following function fairly regularly:
def select_query_dict(connection, query, data=[]): """ Run generic select query on db, returns a list of dictionaries """ logger.debug('Running query: {}'.format(query)) # Open a cursor to perform database operations cursor = connection.cursor() logging.debug('Db connection succesful') # execute the query try: logger.info('Running query.') if len(data): cursor.execute(query, data) else: cursor.execute(query) columns = list(cursor.description) result = cursor.fetchall() logging.debug('Query executed succesfully') except (Exception, psycopg2.DatabaseError) as e: logging.error(e) cursor.close() exit(1) cursor.close() # make dict results = [] for row in result: row_dict = {} for i, col in enumerate(columns): row_dict[col.name] = row[i] results.append(row_dict) return results