繁体   English   中英

使用 Python Flask 执行多个 SQL 查询

[英]Executing multiple SQL queries with Python Flask

我有一个 python function 应该执行 2 个 SQL 查询。 我发现不可能一次在一个命令中执行 2 个查询,因此作为一种解决方法,我创建了一个查询列表并尝试使用执行命令对其进行迭代。 然而,MySQL 表中没有添加任何内容。 这是代码:

@app.route('/addComment', methods=['POST'])
def addComment():
    try:
        if session.get('user'):
            _description = request.form['description']
            _user = session.get('user')
            _term_id = request.form['termID']
            _time = datetime.now()
            operation = ['"INSERT INTO comments (description, user, termID, time) VALUES (%s, %s, %s, %s)", (_description, _user, _term_id, _time)', '"INSERT INTO history (user, term, time) VALUES (%s, %s, %s)", (_user, _term_id, _time)']

            conn = mysql.connect()
            cursor = conn.cursor()
            for item in operation:
                cursor.execute()
                conn.commit()
                data = cursor.fetchall()
            

            if len(data) == 0:
                conn.commit()
                return json.dumps({'status':'OK'})
            else:
                return json.dumps({'status':'ERROR'})
    except Exception as e:
        return json.dumps({'status':'Unauthorized access'})
    finally:
        cursor.close()
        conn.close()

请你帮助我好吗?

您的代码中的错误存在于以下几个方面:

A. 在迭代 sql 语句未传递给execute()

应该:

for item in operation:
    cursor.execute(item)
    conn.commit()

B.无效的参数化

'"INSERT INTO comments (description, user, termID, time) VALUES (%s, %s, %s, %s)", (_description, _user, _term_id, _time)'

此字符串语句不会将变量应用于 SQL 语句字符串。 根据您的值类型,您应该决定是否添加' (撇号)。 更安全的方法是将参数传递给.execute() function。 下面的例子。

cursor.execute(
    "INSERT INTO comments (description, user, termID, time) VALUES (:description, :user, :term_id, :time)",
    description=_description,
    user=_user,
    term_id=_term_id,
    time=_time
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM