在sqlite数据库中更新字符扩展字段,其中最低有效数字/字符匹配

时间:2017-06-01 08:05:55

标签: python sqlite

我正在编写一个python脚本,用于将大量文本文件中的信息提取到数据库中。为简单起见,假设列为id(主键,一串数字存储为text),name(存储为text,不唯一),以及一堆包含其他数据的其他列。

该脚本一切运行良好,但是源文件中的id字段一度从< = 6个字符变为7个字符,并且在现有记录的ID开头添加了额外的数字 - 所以12345可能会成为2012345(或3312345等)。似乎没有办法一致地确定添加的数字是什么,但之前的id仍然是最不重要的 n 数字(其中 n =旧id的长度。

我想要做的是创建一个sqlite查询,以便在导入中运行id的更改,将id更新为新格式,其中a){{{ 1}}字段与新记录的最低有效数字与旧ID完全匹配的现有行相同。我正在努力编写一个执行此操作的查询,但是 - 任何想法?

编辑:根据要求,示例数据:

初始表:

name

然后,如果我们遇到要更新的记录:

+--------+-----------------+-------+
|   id   |      name       | other |
+--------+-----------------+-------+
| 277908 | Anderson, Jason | foo   |
|  10360 | Anderson, Jean  | bar   |
|  10371 | Anderson, John  | baz   |
|  57892 | Anderson, John  | qwe   |
+--------+-----------------+-------+

更新了ID,表格变为:

+---------+-----------------+-----+
| 1277908 | Anderson, Jason | asd |
+---------+-----------------+-----+

然而,如果我们遇到记录:

+--------+-----------------+-------+
|   id   |      name       | other |
+--------+-----------------+-------+
|1277908 | Anderson, Jason | foo   |
|  10360 | Anderson, Jean  | bar   |
|  10371 | Anderson, John  | baz   |
|  57892 | Anderson, John  | qwe   |
+--------+-----------------+-------+

然后表格未被修改,因为该名称与记录中的名称不匹配,如果我们遇到记录:

+---------+-----------------+-----+
| 2010360 | Anderson, Jean2 | zxc |
+---------+-----------------+-----+

然后只更新具有匹配的最低有效位的id,表格变为:

+---------+----------------+-----+
| 2010371 | Anderson, John | poi |
+---------+----------------+-----+

请注意,这里我们更新id字段 - 这是故意的,因为这将是一次运行条件,它将更新数据中发生id更改的点处的记录。此部分运行后,将更新其他数据或添加记录。

1 个答案:

答案 0 :(得分:0)

只需将该表达式转换为SQL:

UPDATE MyTable
SET id = :Newid
WHERE :NewId != id
  AND substr(:NewId, -length(id)) = id
  AND name = :NewName

(这假设id值是字符串。)