如何为单元格中找到的每个新值增加ID

时间:2019-07-12 17:18:52

标签: mysql python-3.x

我正在构建一个python代码来读取.csv文件,将这些值放入MySQL数据库中。在此特定示例中,列中只有2个值,即“ a”或“ b”。 python第一次看到'a'时,它将值添加到mysql中并为其指定ID。下次遇到“ a”时,应跳过。同样适用于值“ b”。

问题是我的代码从.csv的第一行将'a'值导入数据库,但没有导入'b'值,我认为它仅从第10行左右开始。

遍历.csv

with open('test.csv', 'r') as file:
    csv_reader = csv.reader(file)
    for line in csv_reader:
        value_from_csv = (line[6])

创建表格

CREATE TABLE `letters` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `letter` VARCHAR(255),
    PRIMARY KEY (`id`),
    UNIQUE INDEX `letter_a_or_b` (`letter_a_or_b`)
)
COLLATE='latin1_swedish_ci'
;

插入mysql

cur = connection.cursor()
cur.execute('''INSERT IGNORE INTO letters (letter_a_or_b) VALUES (%s)''', (value_from_csv,))
connection.commit()
cur.close()
connection.close()

运行此命令时,我没有任何错误,它只是运行。只是没有得到预期的id(1)-'a'和id(2)-'b'我得到了id(1)-'a'就是这样。

如果有帮助,我将HeidiSQL用作mysql管理工具。

1 个答案:

答案 0 :(得分:0)

在第二个块中,您保持覆盖 value_from_csv,因此您只需在表中插入最后一个。

一种方法可能是在列表中累积值,然后循环遍历该列表并将其插入数据库中:

value_from_csv = []
with open('test.csv', 'r') as file:
    csv_reader = csv.reader(file)
    for line in csv_reader:
        value_from_csv.append(line[6])

cur = connection.cursor()
for value in value_from_csv:
    cur.execute('''INSERT IGNORE INTO letters (letter_a_or_b) VALUES (%s)''', (value,))
connection.commit()
cur.close()
connection.close()

请注意,如果您知道CSV中只有两个值,则可以优化此过程,只需检查CSV是否同时具有两个值或其中一个。