【问题标题】:How to insert variable to sql table in python if variable is not already in table?如果变量尚未在表中,如何在 python 中将变量插入到 sql 表中?
【发布时间】:2022-08-13 22:16:59
【问题描述】:

我的 python 程序中的 sqlite 数据库有问题。我正在尝试创建一个保存玩家得分记录的表。播放器名称保存为变量“val”,该变量用于 sql 代码。此外,如果玩家已经在我的桌子上,我不想创建重复。

我的问题是,如果我不使用 WHERE {v}... 一切正常,但是当我试图阻止表创建重复项时,它会给我一个 OperationalError: near \"WHERE\": 语法错误。

我对 sql 很陌生,所以我很难找到我做错了什么。我使用 (?) 和格式,只要我不使用 WHERE 它就可以。如何确保我的 sql 代码之外的变量(玩家名称)不在我的表中,以便我可以插入它?

        val = \"PlayerName\"
        cur.execute( \"\"\"
                    INSERT INTO Table (player_name)
                    VALUES {v}
                    WHERE  {v} NOT IN (
                    SELECT player_name FROM Table)\"\"\".format(v = val))
        
  • INSERT 语句没有 WHERE 子句。您可以先执行SELECT 来检查名称,也可以在name 列上添加UNIQUE 索引以在名称已经存在时强制出错(如果您的程序有多个并发用户,这会更安全)。
  • 那天晚上晚些时候,我意识到我不能在这里使用 WHERE 子句,byte UNIQUE 根本没有帮助我。我不想强制出错,而是要正确创建我的表并继续我的程序,因为我的 sql 代码是在更大的 python 程序中实现的。
  • 答案here 回答了您的问题吗?我认为INSERT OR IGNORE 可能是您想要的。

标签: python sql sqlite


【解决方案1】:

好的,现在可以了。我的主要问题是我试图使用来自 MySQL 的命令而不是 sqlite。我的代码有效:

            cur.execute( """INSERT INTO Table (player_name)
                        VALUES (?)
                        ON CONFLICT(player_name) DO UPDATE SET player_name= player_name""",(val) ) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多