Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Looking for the equivalent of dictcursor in flaskext.mysql

I've written a Python Flask app, and initially used MySQLdb to access MySQL. Later I've switched to flaskext.mysql for the same purposes, but now when I use this module I cannot see how to get a dictionary structured cursor.

When I using the MySQLdb module I was using the following line to open a dictionary based cursor -

import MySQLdb as mdb
con = mdb.connect('localhost','root','root','transport')
    with con:
        cur = con.cursor(mdb.cursors.DictCursor)

Now I'm trying to do the same with flaskext.mysql, my currect code looks like this -

from flaskext.mysql import MySQL
cur = mysql.get_db().cursor()

What should I feed the cursor object in order to get the same type of cursor?

like image 724
Yaron Idan Avatar asked Mar 11 '23 10:03

Yaron Idan


2 Answers

I think @alecxe was hinting at this in his last code block, but you can use a DictCursor with the Flask extension as follows:

As well as the Flask MySQL extension you need the DictCursor

from flaskext.mysql import MySQL
from pymysql.cursors import DictCursor

Then simply add the parameter cursorclass=DictCursor when creating the MySQL object:

mysql = MySQL(cursorclass=DictCursor)

I'm using this in my own Flask app and it seems to be working as expected

Note: I discovered this solution lurking in a comment in the issue queue in the Github repo for the project here. I do wish the library documentation was more than a few lines long.

like image 50
Steve Avatar answered Mar 24 '23 12:03

Steve


mysql.get_db() would result into your "connection" object, you can do:

import MySQLdb as mdb

cur = mysql.get_db().cursor(mdb.cursors.DictCursor)

Or, you can also set the default cursorclass when initializing the extension:

mysql = MySQL(cursorclass=mdb.cursors.DictCursor)
like image 21
alecxe Avatar answered Mar 24 '23 11:03

alecxe