psycopg2.errors.SyntaxError: syntax error at or near '

psycopg2.errors.SyntaxError: syntax error at or near '

我想在我的 table 'message': d'eau 中添加新消息,但我收到了这个错误: (p.s 当我添加另一条消息如 'problème' 或其他类型的重音时,我没有错误) 如何解决?

psycopg2.errors.SyntaxError: syntax error at or near "eau"
LINE 1: ...essage (message, published_on, active) VALUES ('d'eau',NOW()...
                                                             ^

我的函数:

def post_new_message():
    ConnexionDB()

    message = request.form["message"]
    sql_set_all_message_to_false = "UPDATE message SET active = False"
    DB_Protocole.cur.execute(sql_set_all_message_to_false)
    DB_Protocole.conn.commit()
    sql_insert_message = "INSERT INTO message (message, published_on, active) VALUES ('"+message+"',NOW(),True)"
    DB_Protocole.cur.execute(sql_insert_message)
    DB_Protocole.conn.commit()
    DeconnexionDB()

    return redirect(url_for("get_message"))

您正试图在用单引号括起来的查询文本中写入消息。这很糟糕,因为几十年来它一直是 SQL 注入攻击的来源,推荐的方法是使用参数化查询。

但是在这里,当您的文本包含像 "d'eau" 这样的简单引号时,查询字符串以:

结尾
...VALUES('d'eau',...)

至少应该 ...VALUES('d''eau',...) 将违规报价加倍。这就是错误的原因。

出于所有这些原因,您应该使用参数化查询:

DB_Protocole.cur.execute("INSERT INTO message (message, published_on, active) VALUES (?,NOW(),True)", [message])