【发布时间】:2021-10-08 19:54:47
【问题描述】:
我希望用户能够将值更新到数据库,但即使数据库中不存在该记录,我也希望以相同的方式工作。所以我想结合插入和更新。我正在考虑为数据库中的记录执行一个 for 循环以查看记录是否存在,然后执行一个 IF 语句来决定我应该插入还是更新。我想这会每次都有效,但第一次。如果数据库中不存在任何记录,这似乎不起作用,我猜那是因为当数据库为空时 i = none。
例子:
conn = sqlite3.connect("database.db")
c = conn.cursor()
c.execute("SELECT *, oid FROM database")
schemalaggning = c.fetchall()
conn.commit()
conn.close()
for i in schemalaggning:
if clicked1.get() and clicked2.get() and clicked10.get() in i:
myUPDATEfunction()
else:
myINSERTfunction2()
How can i solve this problem?
My specific code:
conn = sqlite3.connect("schemalaggning.db")
c = conn.cursor()
c.execute("SELECT *, oid FROM schemalaggning")
schemalaggning = c.fetchall()
conn.commit()
conn.close()
for i in schemalaggning:
if clicked1.get() and clicked2.get() and clicked10.get() in i:
conn = sqlite3.connect("schemalaggning.db")
c = conn.cursor()
c.execute("""UPDATE schemalaggning SET
namn = :namn,
ar = :ar,
vecka = :vecka,
mandag = :mandag,
tisdag = :tisdag,
onsdag = :onsdag,
torsdag = :torsdag,
fredag = :fredag,
lordag = :lordag,
sondag = :sondag
WHERE oid = :oid""",
{
"namn": clicked10.get(),
"ar": clicked1.get(),
"vecka": clicked2.get(),
"mandag": clicked3.get(),
"tisdag": clicked4.get(),
"onsdag": clicked5.get(),
"torsdag": clicked6.get(),
"fredag": clicked7.get(),
"lordag": clicked8.get(),
"sondag": clicked9.get(),
"oid": i[10]
})
conn.commit()
conn.close()
else:
pass
conn = sqlite3.connect("schemalaggning.db")
c = conn.cursor()
c.execute("INSERT INTO schemalaggning VALUES (:namn, :ar, :vecka, :mandag, :tisdag, :onsdag, :torsdag, :fredag, :lordag, :sondag)",
{
"namn": clicked10.get(),
"ar": clicked1.get(),
"vecka": clicked2.get(),
"mandag": clicked3.get(),
"tisdag": clicked4.get(),
"onsdag": clicked5.get(),
"torsdag": clicked6.get(),
"fredag": clicked7.get(),
"lordag": clicked8.get(),
"sondag": clicked9.get()
}
)
conn.commit()
conn.close()
【问题讨论】:
-
也许只是一个upsert 就足够了?
-
我以前没有听说过upsert(我是初学者),我不确定我是否从链接中理解。这是否意味着如果记录不存在则插入数据,如果记录存在则更新?你会如何使用你的 upsert 来写这个?如果记录已经存在,我仍然需要知道将数据放在哪里,那么我该如何编写代码?
-
我认为那里有足够的信息来解释它;如果不清楚,您也可以查看其他来源。我相信它可以完全满足您的要求;至于如何将其应用于您的具体情况,如果没有实际陈述作为示例的一部分,很难说。如需更详细的答案,请提供minimal reproducible example。
-
我已经用我的特定代码更新了我的帖子。
标签: python database sqlite tkinter