Python / Flask mysql游标:为什么它不起作用?

时间:2017-11-24 19:12:35

标签: python mysql flask

cmd1 | cmd2 | cmd3 | cmd4

执行程序后显示错误:

cur = mysql.connection.cursor()

AttributeError:'NoneType'对象没有属性'cursor'。

根据文件记录,它应该有效。我使用的是Ubuntu 16.04,我安装了MySQL,它运行正常。谁能解释为什么它不起作用?

5 个答案:

答案 0 :(得分:0)

我使用了connect()方法而不是get_db(),它可以与Python 3.5.5一起使用。使用get_db

时遇到相同的错误
from flask import Flask
from flaskext.mysql import MySQL


app = Flask(__name__)


app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'root'
app.config['MYSQL_DATABASE_DB'] = 'test_db'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'

mysql = MySQL()
mysql.init_app(app)

# cursor = mysql.get_db().cursor()
cursor = mysql.connect().cursor()
print(cursor)

答案 1 :(得分:0)

问题出在:

app.config['MYSQL_CURSORCLASS'] = 'DictCursor'

查看 flaskext.mysql 源,该功能尚未实现。

由于 flaskext.mysql 使用的是 pymysql ,因此您可以使用 pymysql.cursors DictCursor

示例:

from flaskext.mysql import MySQL 
from flask import Flask 
from pymysql import cursors

app=Flask(__name__)

mysql = MySQL(cursorclass=cursors.DictCursor)
mysql.init_app(app)
cursor = mysql.connect().cursor()

答案 2 :(得分:0)

app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_DATABASE_PORT'] = 3308 #here your port

enter image description here

答案 3 :(得分:0)

您正在基于flask_mysqldb构造游标,并且直到点击第一个路由时,Flask应用程序才会自行构建,这意味着Flask应用程序将在Flask函数内部构造,这时您的MySQL连接也可以根据您的app.config参数构造,然后可以基于MySQL连接构造光标: 烧瓶构造> MySQL连接构造>游标构造。

因此,您必须在Flask Function中使用游标构造函数: 代替:

readFileContent

输入:

byte[]

答案 4 :(得分:-1)

也许您需要为MySQL上下文初始化应用程序。

from flask import Flask
from flask_mysqldb import MySQL

app = Flask(__name__)
mysql = MySQL()
mysql.config['MYSQL_HOST'] = 'localhost'
mysql.config['MYSQL_USER'] = 'root'
mysql.config['MYSQL_PASSWORD'] = 'password'
mysql.config['MYSQL_DB'] = 'todoapp'
mysql.config['MYSQL_CURSORCLASS'] = 'DictCursor'
mysql.init_app(app)
cur = mysql.connection.cursor()

if __name__ == '__main__':
    app.run()