我正在构建一个python代码来读取.csv文件,将这些值放入MySQL数据库中。在此特定示例中,列中只有2个值,即“ a”或“ b”。 python第一次看到'a'时,它将值添加到mysql中并为其指定ID。下次遇到“ a”时,应跳过。同样适用于值“ b”。
问题是我的代码从.csv的第一行将'a'值导入数据库,但没有导入'b'值,我认为它仅从第10行左右开始。
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'
;
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管理工具。
答案 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是否同时具有两个值或其中一个。