在 SQL 数据库中一次输入多个列表

Posted

技术标签:

【中文标题】在 SQL 数据库中一次输入多个列表【英文标题】:Entering multiple lists at once in SQLi Database 【发布时间】:2022-01-14 03:11:23 【问题描述】:

我正在使用以下命令在 SQLi 数据库中输入列表值。

    sql_comm = "INSERT INTO Revisions (Work_ID,Rev_No,Name,Date) VALUES (?,?,?,?);"
    data = (wid,i,rev_name,rev_date)
    crsr.execute(sql_comm,data)
    sql_com2 = "INSERT INTO Revisions (Field,New_Value) VALUES (?,?)"
    for elem in zip(changes,vals):
        crsr.execute(sql_com2,elem)
    connection.commit()

这是结果输出。

Work_ID Rev_No  Name                                   Date               Field      New Value                                          
172      1      Raul Gitta <raoul_g@ware.23biz> 2021-10-21T10:08:10.653Z   null       null
null    null    null    null                                      System.Rev            2
null    null    null    null                                      System.AuthorizedDate 2021-10-20T06:42:01.32Z
null    null    null    null                                      System.RevisedDate    2021-10-21T10:08:10.653Z
null    null    null    null                                      System.ChangedDate    2021-10-20T06:42:01.32Z
null    null    null    null                                      System.Watermark      198

有没有办法避免这些null 值?

【问题讨论】:

【参考方案1】:

所有空值都源于它们没有插入到适当的 INSERT 查询中。由于列表是可变的,因此对参数使用列表而不是元组可能更容易。

类似:

data = [wid,i,rev_name,rev_date]
sql_com2 = "INSERT INTO Revisions (Work_ID,Rev_No,Name,Date,Field,New_Value) 
VALUES (?,?,?,?,?,?)"
for elem in zip(changes,vals):
    crsr.execute(sql_com2,data + list(elem))
 connection.commit()

【讨论】:

crsr.execute(sql_comm,data) 这不需要...对吗? 正确,我忘了从复制/粘贴中删除。编辑中...... 那么,我们不能为单值列设置 1 行,为具有列表作为值的列设置多行,而其他列的相应行保持空白? 如果您想要空白而不是 null,则将架构中的默认值更改为空白或插入空白。我有点困惑,因为如果这些列 (Work_ID,Rev_No,Name,Date) 是空白的,你怎么知道哪些行是“相关的”?或者,也许您需要为字段 New_Values 添加一个新的子表(大概带有父键)。澄清问题可能会有所帮助。

以上是关于在 SQL 数据库中一次输入多个列表的主要内容,如果未能解决你的问题,请参考以下文章

SQL中一次插入多条数据

Pandas 从列表列表中一次添加多个新列

如何从 R 中的 selectInput 函数中一次选择所有输入

如何在 Firestore 中一次创建/更新多个文档

如何在Oracle中一次执行多条sql语句

如何使用java代码在单个数据库中一次连接多个模式