【问题标题】:psycopg2 error say i am inserting integer when i am inserting text/ stringpsycopg2 错误说我在插入文本/字符串时插入整数
【发布时间】:2023-03-30 16:39:01
【问题描述】:

当我从我的 python 应用程序运行此查询时

DB.execute("insert into matches values(%s ,%s, %s, %s)", (player1, player2, player1_result, player2_result,))

我收到此错误

psycopg2.DataError: invalid input syntax for integer: "win"
LINE 1: insert into matches values(689 ,690, 'win', 'lose')
                                             ^

player1、player2、player1_result 和 player2_result 是这里给包含函数的参数

reportMatch(id1, id2, "win", "lose")

这是表定义

create table matches ( player1 serial references players, player2 serial references players, player1_result text, player2_result text, match_ID serial primary key);

【问题讨论】:

  • 首先,尝试在insert 语句中明确列出列。
  • 哦,如果你的意思是通过查询来列出它们,我不能,因为表是空的
  • 不,我的意思是使用insert into matches(player1, player2, player1_result, player2_result) . . . 使用insert 时,您应该几乎总是包含明确的列列表。
  • 哦,对不起,我真的不知道该怎么做。但是,我刚刚解决了我的问题,问题是“win”被插入到“player2”中,因为“player1”参数被插入到“match_ID”列中,因为没有明确说明值应该是哪些列插入到。我认为没有任何东西可以插入串行列。你能告诉我如何在我的插入语句中显式声明列吗?

标签: python sql psycopg2 psql


【解决方案1】:

您的 SQL 查询是:

insert into matches
    values(%s ,%s, %s, %s)

(然后是值)

这是一种不好的形式,因为插入的顺序取决于列的声明顺序。

使用insert 时,应显式列出列,因此 SQL 如下所示:

insert into matches(player1, player2, player1_result, player2_result)
    values(%s ,%s, %s, %s)

在你的陈述中,这是:

DB.execute("insert into matches(player1, player2, player1_result, player2_result) values(%s ,%s, %s, %s)", (player1, player2, player1_result, player2_result))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2012-05-07
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多