【问题标题】:I have a problem with sql query don´t work in flask我对 sql 查询有问题,在烧瓶中不起作用
【发布时间】:2019-11-12 20:53:34
【问题描述】:

我尝试运行该代码,但我的 sql 查询有问题,但如果在 mysql workbeck 中运行查询,它可以工作

app.config['MYSQL_HOST'] = "localhost"
app.config['MYSQL_USER'] = "root"
app.config['MYSQL_PASSWORD'] = ""
app.config['MYSQL_DB'] = "inventario_bodega"
mysql = MySQL(app)

@app.route("/login", methods=["POST"])
def login():
    try:
        data = request.json
        user = data["user"]
        password = data["password"]
        cur = mysql.connection.cursor()
        #thats part don´t work
        cur.execute("SELECT * FROM usuarios WHERE usuario = %s", (user))

        data = cur.fetchone()
        cur.close()
        if(not (data == [])):
            if(data[6] == password):
                encoded_jwt = jwt.encode(
                    {'datos': data}, app.config['SECRET_KEY'], algorithm='HS256')
                return encoded_jwt, 200
            else:
                return "Usuario y/o Contraseña incorrecta", 401
        else:
            return "Usuario y/o Contraseña incorrecta", 401
    except:
        return "Error al iniciar sesion", 500

但不显示错误只显示 500 错误

this is what appears to me in the terminal

【问题讨论】:

  • 你能更好地定义“不起作用”吗?这不是一个非常详细的诊断。
  • 您的查询有什么问题?
  • MySQL 身份验证详细信息(用户、密码、数据库等)在哪里?
  • 我的 猜测 应该是 usuario = '%s'" 注意额外的单引号。但是您应该真正致力于追踪原始错误消息。您可以轻松地将代码包装在 try...except 中并在某处记录/打印异常。你已经尝试过了..除了,你只是没有对原始异常做任何事情。
  • 另一个猜测是 cur.execute 的 seconds 参数必须是可迭代的,在这种情况下 (user) 应该是 (user,),将其变成一个元组。

标签: python mysql flask flask-mysql


【解决方案1】:

cur.exectute() 想要一个元组或参数列表。看起来您正在尝试使用前者,这是 Python 中的一种极端情况,其中逗号区分用于形成元组的括号或用于控制评估顺序的括号。

改变

cur.execute("SELECT * FROM usuarios WHERE usuario = %s", (user))

cur.execute("SELECT * FROM usuarios WHERE usuario = %s", (user,))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 2021-04-09
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多