在 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 数据库中一次输入多个列表的主要内容,如果未能解决你的问题,请参考以下文章