【问题标题】:psycopg2.errors.SyntaxError: syntax error at or near 'psycopg2.errors.SyntaxError: ' 处或附近的语法错误
【发布时间】:2020-04-16 09:03:17
【问题描述】:

我想在我的表 'message': d'eau 中添加新消息,但我收到了这个错误: (p.s 当我添加另一条消息,如“问题”或其他类型的口音时,我没有错误) 怎么解决?

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"))

【问题讨论】:

标签: python sql postgresql sql-insert psycopg2


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-11-18
    • 2020-08-29
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2018-03-12
    相关资源
    最近更新 更多