У меня есть несколько файлов CSV в одной папке с одинаковой структурой, и я хотел бы импортировать их в базу данных для дальнейшего анализа.
Столбцы CSV следующие:
Company_Code, Company_Name, Year, Account_number, Account_Description, Value
Я намерен использовать этот CSV для заполнить 3 таблицы в моей БД в MySQL Workbench. Эти таблицы отвечают за организацию:
company_data: идентификатор, код и имя.
Счета: идентификатор, номер счета и описание учетной записи.
Значения: companyID, accountID, год и значение.
Я хочу всегда сохранять связь между ценности компании и учетную запись, но таким образом, чтобы упростить запросы и анализ.
Я пробовал python, но не могу понять, как прикрепить внешние ключи. Я не знаю, лучше ли импортировать во временную таблицу, а затем заполнить каждую таблицу непосредственно в MySQL верстаке
Редактировать: для моего подхода python я пытался получить данные из XML файл, содержащий ту же информацию, но он начал переходить к техническому, потому что мне нужно будет реализовать несколько проверок, которые с CSV не нужны.
import xml.etree.ElementTree as ET;
import csv
import mysql.connector;
mydb = mysql.connector.connect(
host = "localhost",
user = "root",
passwd = "########",
database = "cvmsanepar"
)
mycursor = mydb.cursor();
mycursor.execute("CREATE TABLE CVM (conta VARCHAR(255), descricao VARCHAR(255), valor1 INTEGER(10), valor2 INTEGER(10), valor3 INTEGER(10))");
dfpTree = ET.parse("InfoFinaDFin.xml");
dfpRoot = dfpTree.getroot();
conta1 = []; #codigo CVM do plano de contas (accounts)
descricao = []; #descrição do plano de conta (account description)
valor1 = []; #valor ano do documento (value year 1)
valor2 = []; #valor ano anterior (value year 2)
valor3 = []; #valor ano anterior do anterior (value year 3)
for numeroDeConta in dfpRoot.iter('NumeroConta'):
conta1.append(numeroDeConta.text);
for descricaoConta in dfpRoot.iter('DescricaoConta1'):
descricao.append(descricaoConta.text);
for valor in dfpRoot.findall('InfoFinaDFin'):
valor1.append(valor.find('ValorConta1').text);
valor2.append(valor.find('ValorConta2').text);
valor3.append(valor.find('ValorConta3').text);
def merge(conta1,descricao,valor1,valor2,valor3):
mergedList = [(conta1[i], descricao[i], valor1[i], valor2[i], valor3[i]) for i in range(0, len(conta1))]
return mergedList
sqlFormula = "INSERT INTO CVM (conta, descricao, valor1, valor2, valor3) VALUES (%s,%s,%s,%s,%s)"
mycursor.executemany(sqlFormula, merge(conta1,descricao,valor1,valor2,valor3));
mydb.commit();