![](/img/trans.png)
[英]How do I insert variables in the UPDATE Statement sqlite3 with Python?
[英]Python SQLITE3 Insert into and On conflict do update with variables - Syntax problem?
我在 for 循環中調用的方法中運行此代碼並將其傳遞給它'text_body':
*connecting to db*
cursor.execute('CREATE TABLE IF NOT EXISTS temp_data (temp_text_body text, id integer)')
cursor.execute('INSERT INTO temp_data(temp_text_body, id) VALUES (?, 1) ON CONFLICT (id) DO UPDATE '
'SET temp_text_body = temp_text_body || (?)', (text_body, text_body))
*commiting connection*
我的目標是,第一次調用它來創建一個表並用'text_body'填充它,然后在第二次調用時添加到第一個'text_body'第二個'text_body'等等。
我嘗試了此代碼的許多組合,我也嘗試使用 UPDATE 來完成(這很好,但 UPDATE 需要一些數據才能真正開始工作)。
當我的代碼到達這個地方時,它只是停止運行,沒有任何錯誤。 有人可以讓我知道我在哪里犯了錯誤嗎?
您不能在不是主鍵或沒有“唯一約束”的字段上設置“ON CONFLICT”。 這是我在運行您的代碼時收到的錯誤消息:
sqlite3.OperationalError:
ON CONFLICT clause does not match any PRIMARY KEY or UNIQUE constraint
這實質上是因為如果該字段上沒有主鍵/唯一約束,則不會發生沖突。
在您希望id
成為唯一主鍵的假設下,我創建了一個工作片段:
import sqlite3
cursor = sqlite3.connect('stack_test.db')
cursor.execute('''CREATE TABLE IF NOT EXISTS temp_data
(temp_text_body TEXT,
id INTEGER PRIMARY KEY)''')
cursor.execute('''
INSERT INTO
temp_data(temp_text_body, id)
VALUES
(?, 1)
ON CONFLICT (id) DO UPDATE
SET
temp_text_body = temp_text_body || (?)''',
("foo", "bar"))
cursor.commit()
我還對您編寫查詢語句的方式進行了一些風格上的更改,我希望這將使它們更容易調試!
祝您使用 SQLite'ing 好運,請隨時詢問我的答案是否有任何部分不清楚:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.