Упрощенная версия исходного примера, в таблице бд 5 столбцов
CREATE TABLE `main_test` (
`id` bigint NOT NULL AUTO_INCREMENT,
`col_1` int NOT NULL,
`col_2` varchar(20) NOT NULL,
`col_3` varchar(20) NOT NULL,
`col_4` varchar(20) NOT NULL,
`col_5` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
состав example.csv
csv_col1,csv_col2,csv_col3,csv_col4,csv_col5,
"15347","random_symb_1","1abc","1def","1AAAAAAAAAA",
"25347","random_symb_2","2abc","2def","2AAAAAAAAAA",
"3234","random_symb_3","3abc","3def","3AAAAAAAAAA",
"45677","random_symb_4","4abc","4def","4AAAAAAAAAA",
"55675","random_symb_5","5abc","5def","5AAAAAAAAAA",
есть переменная в которую считался набор данных из csv файла при помощи csv.DictReader
вывод line выглядят так:
{'csv_col1': '15347', 'csv_col2': 'random_symb_1', 'csv_col3': '1abc', 'csv_col4': '1def', 'csv_col5': '1AAAAAAAAAA', '': ''}
{'csv_col1': '25347', 'csv_col2': 'random_symb_2', 'csv_col3': '2abc', 'csv_col4': '2def', 'csv_col5': '2AAAAAAAAAA', '': ''}
{'csv_col1': '3234', 'csv_col2': 'random_symb_3', 'csv_col3': '3abc', 'csv_col4': '3def', 'csv_col5': '3AAAAAAAAAA', '': ''}
{'csv_col1': '45677', 'csv_col2': 'random_symb_4', 'csv_col3': '4abc', 'csv_col4': '4def', 'csv_col5': '4AAAAAAAAAA', '': ''}
{'csv_col1': '55675', 'csv_col2': 'random_symb_5', 'csv_col3': '5abc', 'csv_col4': '5def', 'csv_col5': '5AAAAAAAAAA', '': ''}
скорректировал программу с учетом ваших комментариев и документации и примеров (спасибо что ткнули носом, где смотреть
import csv
import pymysql
conn = pymysql.connect(
user="test_user",
password="u4534@F_18bbb",
host="localhost",
database="example_sch",
port=3306,
)
with open("example.csv", "r", encoding="cp1251") as f:
reader = csv.DictReader(f, delimiter=",")
for line in reader:
cursor = conn.cursor()
sql_insert = "INSERT INTO `main_test` (`col_1`,`col_2`,`col_3`,`col_4`,`col_5`) VALUES (%s,%s,%s,%s,%s)"
cursor.execute(sql_insert,(line["csv_col1"], line["csv_col2"], line["csv_col3"], line["csv_col4"], line["csv_col5"]))
print(line)
conn.commit()
cursor.close()
conn.close()
при таком коде все записи из csv вставились, спасибо за правки, хочу перенести в свой основной вопрос, вопрос из комментария:
предположим у меня 10 столбцов в таблице и все они созданы 1 к 1 с CSV файлом и последовательность сохранена, есть ли возможность не прописывать каждый из столбцов
вот в таком виде
sql_insert = "INSERT INTO `main_test` (`col_1`,`col_2`,`col_3`,`col_4`,`col_5`) VALUES (%s,%s,%s,%s,%s)"
cursor.execute(sql_insert,(line["csv_col1"], line["csv_col2"], line["csv_col3"], line["csv_col4"], line["csv_col5"]))
а как-то указать, что начиная от второго столбца (т.к. id нет в CSV) все столбцы брать подряд из line?