python - sqlite3 如果不存在则插入(使用 Python)

标签 python database sqlite insert

首先,我真的是 super 新手,所以我希望我能够正确地发布问题。如果有任何问题,请告诉我。

现在,这是我的问题:我想用数据填充数据库,前提是数据库中尚不存在该数据。我搜索了这个主题,我想我找到了正确的答案(你可以在这里阅读一个例子:[ "Insert if not exists" statement in SQLite )但是我需要用 python 编写这些简单的命令行..这就是我的问题。 (我预计我对 Python 也很陌生)

所以,这是我所做的:

    self.cur.execute("INSERT INTO ProSolut VALUES('a','b','c')")
    self.cur.execute("SELECT * FROM ProSolut")
    self.cur.execute("WHERE NOT EXISTS (SELECT * FROM ProSolut WHERE VALUES = ('a','b','c'))")

这是错误:

[ERROR] behavior.box :_safeCallOfUserMethod:125 _Behavior__lastUploadedChoregrapheBehaviorbehavior_1142022496:/ProSolutDB_11: Traceback (most recent call last):   File "/usr/lib/python2.7/site-packages/albehavior.py", line 113, in _safeCallOfUserMethod     func(functionArg)   File "<string>", line 45, in onInput_onStart OperationalError: near "WHERE": syntax error  

所以基本上我认为第三个字符串中的括号“(”存在一些问题。--> (“OperationalError: near “WHERE”: syntax error”)

我知道这可能是一个愚蠢的错误。 如果你能帮助我,我将不胜感激。

非常感谢


E.G.: 忘了说我用的是软件Choregraphe,它使用Python语言来构建所有的功能 block 。 这意味着,即使语言基本上是 Python,有时语义也不完全相同。 我希望这篇文章能对以后的人有所帮助。

最佳答案

首先,您需要将所有内容组合到单个 self.cur.execute() 调用中。对此的每次调用都必须是一个完整的查询,它们不会相互连接。

其次,您不能同时将 VALUESSELECT 作为数据源 INSERT 查询,它必须是其中之一。

第三,您不想从表中选择作为数据源,因为这将为表中与 WHERE 表达式匹配的每一行插入一个新行(这是all 或 none,因为 WHERE 表达式未引用所选行中的任何内容)。您只想自己选择值。

this.cur.execute("""
    INSERT INTO ProSolut (col1, col2, col3)
    SELECT 'a', 'b', 'c'
    WHERE NOT EXISTS (SELECT * FROM ProSolut WHERE col1 = 'a', col2 = 'b', col3 = 'c';
    """)

col1col2col3 替换为您要填写的列的实际名称。

如果任何或所有列是表中的唯一键,您可以只使用INSERT OR IGNORE:

this.cur.execute("""
    INSERT OR IGNORE INTO ProSolut (col1, col2, col3)
    VALUES ('a', 'b', 'c');
    """);

关于python - sqlite3 如果不存在则插入(使用 Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39793327/

相关文章:

database - PostgreSQL:创建表后列不存在

sql - 获取每组一个最大值

android - 在 Android 上使用 phonegap 可以在单个事务上运行的 executeSql 语句的数量是否有限制?

python - python 是否对多段导入做了额外的事情?

python - 读取 Wireshark 转储文件中的数据包时间

python - pysftp Paramiko PasswordRequiredException:私钥文件已加密

python - 从 cx_oracle 执行一个 sql 脚本文件?

python - 如何在 python 中处理损坏的管道(SIGPIPE)?

java - 在 Android 上使用来自 libGDX 的 SQLite

android - Sqlite如何使用游标获取字符串项