如果列满足conidtion,则sqlite python executemany可以替换,否则忽略
我目前正在制作一个简单的购物清单,由多个用户更新。下面的代码已经完成了它需要完成的大部分工作 用户1将queryList one发送到数据库,其中整数1表示已删除但未删除的项: 用户2发送QueryList 2,其中树莓被划掉,菠菜被添加到列表中如果列满足conidtion,则sqlite python executemany可以替换,否则忽略,python,sqlite,replace,Python,Sqlite,Replace,我目前正在制作一个简单的购物清单,由多个用户更新。下面的代码已经完成了它需要完成的大部分工作 用户1将queryList one发送到数据库,其中整数1表示已删除但未删除的项: 用户2发送QueryList 2,其中树莓被划掉,菠菜被添加到列表中 import sqlite3 as lite queryList1 = [("Raspberries",0),("Water",0),("Lemon",1)] queryList2 = [(
import sqlite3 as lite
queryList1 = [("Raspberries",0),("Water",0),("Lemon",1)]
queryList2 = [("Raspberries",1),("Water",0),("Spinach",0)]
# -- open the connection and create a cursor
conn = lite.connect(':memory:')
cursor = conn.cursor()
conn.execute("""CREATE TABLE shoppingList (
item STRING UNIQUE,
checked INTEGER
);""")
# ----------- First Query -----------------
insertQuery1 = """INSERT INTO shoppingList
VALUES (:item, :checked);"""
with conn:
cursor.executemany(insertQuery1, queryList1)
# ----------- Second Query -----------------
insertQuery2 = """INSERT OR IGNORE INTO shoppingList
VALUES (:item, :checked);
"""
with conn:
cursor.executemany(insertQuery2, queryList2)
# ----------- Display Result Query -----------------
with conn:
cursor.execute("SELECT * FROM shoppingLIST")
print(cursor.fetchall())
# ------------------- close the curser and the database ----------------------
cursor.close()
conn.close()
该代码给出了以下结果:
[("Raspberries",0),("Water",0), ("Lemon",1),("Spinach",1)]
它应该给我以下结果:
[("Raspberries",1),("Water",0), ("Lemon",1),("Spinach",1)]
我尝试使用以下第二个查询命令更新数据库:
with conn:
cursor.executemany("""INSERT OR REPLACE INTO shoppingList VALUES(?,?)
SELECT item,checked WHERE NOT EXISTS(SELECT * FROM shoppingList
WHERE checked = 1);
""", queryList2)
这会导致一个我无法解决的未解释语法错误。
事先非常感谢您的帮助。(树莓,0)是预期的结果。第二次插入被忽略(违反了唯一约束),没有执行DML。如果sqlite版本(sqlite3.sqlite\u版本
)至少为3.24,那么可能会解决问题。还是仅仅是打字错误
第二个查询不是有效的sqlite3语法,句号为。首先,选中的选择项短语没有from
子句