【问题标题】:psycopg2.errors.SyntaxError: syntax error at or near "<"psycopg2.errors.SyntaxError:“<”处或附近的语法错误
【发布时间】:2020-11-18 14:29:12
【问题描述】:

我有一个在 Python 中运行的小型 discord 机器人。我正在尝试使用 OpenTDB 实现一个琐事问题系统,但目前,当我尝试将问题导入 SQL 服务器时,会弹出此错误:

2020-07-29T03:37:42.477745+00:00 app[worker.1]:     await coro(*args, **kwargs)
2020-07-29T03:37:42.477745+00:00 app[worker.1]:   File "Dmemer.py", line 81, in on_ready
2020-07-29T03:37:42.477746+00:00 app[worker.1]:     download_questions()
2020-07-29T03:37:42.477750+00:00 app[worker.1]:   File "Dmemer.py", line 292, in download_questions
2020-07-29T03:37:42.477753+00:00 app[worker.1]:     cur.execute(f"INSERT INTO trivia (id, category, difficulty, question, correct, wrong1, wrong2, wrong3) VALUES ({id}, {category}, {difficulty}, {question}, {correctans}, {badans1}, {badans2}, {badans3})")
2020-07-29T03:37:42.477754+00:00 app[worker.1]: psycopg2.errors.SyntaxError: syntax error at or near "<"
2020-07-29T03:37:42.477754+00:00 app[worker.1]: LINE 1: ...uestion, correct, wrong1, wrong2, wrong3) VALUES (<built-in ...
2020-07-29T03:37:42.477754+00:00 app[worker.1]:                                                              ^

这里是 GitHub 上的源代码:https://github.com/ducanh2002123/Dank-Memer-Private-Clone 报告为损坏的代码行在第 292 行 提前致谢

【问题讨论】:

    标签: python postgresql heroku psycopg2


    【解决方案1】:

    这里至少有两个问题:

    1. 使用 f-strings 设置查询值:这不会正确引用所有变量(例如,'2020-07-30' 可能会被解释为算术表达式),并且可能会使应用程序遭受 SQL 注入攻击。使用连接提供的替代功能:

       cur.execute("""INSERT INTO mytable (col1, col2) VALUES (%s, %s);""", (var1, var2))
      
    2. 您将内置id 函数作为第一个值传递:f 字符串将其转换为字符串'&lt;built-in function id&gt;'。如果必须传递 id 值,请传递数据库期望的类型(通常是 int,有时是 str 或 UUID)。 id 值通常由数据库自动生成,因此根本不需要传递。您可能需要检查表中的 id 列是如何配置的。

    【讨论】:

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