簡體   English   中英

Python SQLITE3 插入和沖突時更新變量 - 語法問題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM