【问题标题】:SQLite update data from one table to anotherSQLite 将数据从一个表更新到另一个表
【发布时间】:2021-06-15 17:01:17
【问题描述】:

我正在尝试将一些数据从一个 SQLite 数据库插入到另一个数据库。我有两张桌子,分别称为“会员”和“出席”。应该发生的是,每次在成员表中添加(或删除)新成员时,还应将特定成员的名称和 ID 添加到出席表中。下图显示了我正在尝试做的事情。

所以我希望每个表中的 ID 和名称都相同(如箭头所示)。图片还显示成员表只有 5 个成员,随着时间的推移会添加更多成员,并且一些删除。

做了一些研究并认为这会起作用,但它返回 sqlite3.OperationalError: near "FROM": syntax error 错误。

CURSOR.execute('''
    UPDATE 
        attendance
    SET    
        id = members.id,
        name = members.name
    FROM
        members
;''')

注意:有一个 CURSOR.execute,因为我这样做是 python 使用我老师要求的 sqlite3 库。

如果有人可以帮助我,那就太好了,谢谢。如果有什么不明白的,请告诉我。再次感谢

【问题讨论】:

  • 从 SQLite 版本 3.33.0 开始支持 UPDATE FROM 语法。检查您的版本。
  • 那不是好的数据库设计。您不应该在attendance 表中包含“名称”,因为您可以在members 中查找它。这只是让事情不同步的机会。
  • INSERT INTO attendance SELECT id, name FROM members 应该可以,但我不知道是什么版本。
  • 如果这不是学校作业,您应该更改出勤设计并删除name列。将id 保留为members 的外键。

标签: python sql sqlite


【解决方案1】:

不更新,但您需要在出勤表中插入行,如下所示。

CURSOR.execute('''
    insert into attendance(id,name)
    select id ,name
    FROM members;''')

但我不认为你想每次都插入所有成员。您可以使用 where id= 1 之类的 where 子句指定成员,或者您需要排除出勤表中已经可用的成员。你可以使用 not exists 如下:

CURSOR.execute('''
        insert into attendance(id,name)
        select id ,name
        FROM members m 
        where not exists
                        (
                           select 1 from attendance where attendance.id=m.id
                        )    ;''')

以上查询只会插入出勤表中不存在的成员。

【讨论】:

    猜你喜欢
    • 2011-05-16
    • 2020-10-13
    • 1970-01-01
    • 2018-05-04
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多