【问题标题】:Looking for the equivalent of dictcursor in flaskext.mysql在 flaskext.mysql 中寻找 dictcursor 的等价物
【发布时间】:2016-08-16 16:30:02
【问题描述】:

我编写了一个 Python Flask 应用程序,最初使用 MySQLdb 来访问 MySQL。后来我出于同样的目的切换到了flaskext.mysql,但是现在当我使用这个模块时,我看不到如何获取字典结构的游标。

当我使用 MySQLdb 模块时,我使用以下行打开基于字典的游标 -

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

现在我正在尝试对 flaskext.mysql 做同样的事情,我的当前代码如下所示 -

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

我应该为光标对象提供什么以获得相同类型的光标?

【问题讨论】:

    标签: python mysql flask


    【解决方案1】:

    我认为@alecxe 在他的最后一个代码块中暗示了这一点,但你可以使用 一个带有 Flask 扩展名的 DictCursor 如下:

    除了 Flask MySQL 扩展,您还需要 DictCursor

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

    然后在创建MySQL对象的时候简单的添加参数cursorclass=DictCursor

    mysql = MySQL(cursorclass=DictCursor)
    

    我在我自己的 Flask 应用程序中使用它,它似乎按预期工作

    注意:我发现这个解决方案隐藏在项目 here 的 Github 存储库的问题队列中的评论中。我真希望库文档的长度超过几行。

    【讨论】:

      【解决方案2】:

      mysql.get_db() 将导致您的“连接”对象,您可以这样做:

      import MySQLdb as mdb
      
      cur = mysql.get_db().cursor(mdb.cursors.DictCursor)
      

      或者,你也可以在初始化扩展时设置默认的cursorclass

      mysql = MySQL(cursorclass=mdb.cursors.DictCursor)
      

      【讨论】:

      • 嘿,感谢您的回答,但这实际上解释了我已经取得的成就。我想知道如何使用flaskext.mysql 模块执行与您描述的相同的操作,以及在哪里可以找到有关它的更多文档(现在我只能找到此页面-flask-mysql.readthedocs.io/en/latest)。如果我提供 mdb.cursors.dictcursor 它自然不起作用,因为 flaskext 无法识别光标类型。
      • 不是我一直在寻找的答案,但因为它让我看到了我不必使用 flaskext 并且更好地使用 mysqldb 的事实,我认为它已经足够好了。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      相关资源
      最近更新 更多