【问题标题】:Is it possible to do a for loop with an empty list in Python/sqlite3是否可以在 Python/sqlite3 中使用空列表进行 for 循环
【发布时间】: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


【解决方案1】:

我通过在我的 for 循环之前添加这一行找到了我的问题的解决方案。

if len(schemalaggning) < 1:
    addfunction
else:
    for loop as above

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2010-11-26
    • 2017-12-26
    相关资源
    最近更新 更多