1
I have the following code:
__author__ = 'Jones_Santos'
# !/usr/bin/python3
import os
from __init__ import mycursor, connection
import csv
import os
from datetime import datetime, date, timedelta, datetime
# Caminho do arquivo a ser importado
caminho_arquivo = './arquivos/analitico_carga_aedu_FC_17122017.csv'
nome_arquivo = os.path.basename('./arquivos/analitico_carga_aedu_FC_17122017.csv')
# ----------- Insere o nome do arquivo que está sendo importado no banco de dados
def inserir_nome_arquivo():
data_importacao = datetime.now().date()
query_inserir_nome_arquivo = ("INSERT IGNORE INTO arquivo "
"(nome_arquivo, data_import) "
"VALUES (%(nome_arquivo)s, %(data_import)s)")
dados_nome_arquivo = {
'nome_arquivo': nome_arquivo,
'data_import': data_importacao,
}
mycursor.execute(query_inserir_nome_arquivo, dados_nome_arquivo)
connection.commit()
query = 'SELECT id_arquivo FROM arquivo WHERE nome_arquivo = %(nome_arquivo)s'
criterios = {
'nome_arquivo': nome_arquivo,
}
mycursor.execute(query, criterios)
for id_arquivo in mycursor:
id_arquivos = int(("{}".format(id_arquivo).replace(',', '').replace('(', '').replace(')', '')))
def ler_e_inserir_arquivo_batimento():
with open(caminho_arquivo, newline='', encoding="latin-1") as arquivo:
conteudo = csv.reader(arquivo, delimiter=';')
next(conteudo, None)
for linha in conteudo:
vr_parc = linha[8].replace(',', '.')
menor_vcto = linha[2]
query_sql_batimento = (
"INSERT INTO batimento(id_arquivo,operacao,fase,menor_vcto,cpfcgc_pes,parcelado_tit,contrato_tit,"
"compl_parc,numero_parc,vr_parc,vcto_parc,cod_unidade,pep)" "VALUES (%(id_arquivo)s,%(operacao)s, "
"%(fase)s,%(menor_vcto)s,%(cpfcgc_pes)s, %(parcelado_tit)s, %(contrato_tit)s,%(compl_parc)s,"
"%(numero_parc)s,%(vr_parc)s,%(vcto_parc)s,%(cod_unidade)s,%(pep)s) "
)
dados_sql_batimento = {
'id_arquivo': id_arquivos,
'operacao': linha[0],
'fase': linha[1],
'menor_vcto': datetime.strptime(menor_vcto[0:10], "%d/%m/%Y").strftime("%Y-%m-%d"),
'cpfcgc_pes': linha[3],
'parcelado_tit': linha[4],
'contrato_tit': linha[5],
'compl_parc': linha[6],
'numero_parc': linha[7],
'vr_parc': float(vr_parc),
'vcto_parc': datetime.strptime(linha[9], "%d/%m/%Y").strftime("%Y-%m-%d"),
'cod_unidade': linha[10],
'pep': linha[11],
}
print(dados_sql_batimento)
mycursor.execute(query_sql_batimento, dados_sql_batimento)
connection.commit()
inserir_nome_arquivo()
ler_e_inserir_arquivo_batimento()
connection.close()
As you can see, I read the files and insert them into my Mysql database, but I always have to keep changing the name of the file with each new import. I want to know how to import the files as soon as they are saved in the folder. Example:
archive1.csv
if file 1.csv has already been imported:
do nothing
if not: import the file
I already store the file names that are imported into the bank:
# ----------- Insere o nome do arquivo que está sendo importado no banco de dados
def inserir_nome_arquivo():
data_importacao = datetime.now().date()
query_inserir_nome_arquivo = ("INSERT IGNORE INTO arquivo "
"(nome_arquivo, data_import) "
"VALUES (%(nome_arquivo)s, %(data_import)s)")
dados_nome_arquivo = {
'nome_arquivo': nome_arquivo,
'data_import': data_importacao,
}
mycursor.execute(query_inserir_nome_arquivo, dados_nome_arquivo)
connection.commit()
For now I’m stuck in this part. Check if I’ve imported the file, if not imported, I import.
Doubt: You can let python "scan" the folder for a new file?
Take a look here https://stackoverflow.com/questions/373335/how-do-i-get-a-cron-like-scheduler-in-python It will depend on the environment you run but the idea is to run a scheduled task to check, from time to time, if there are new files to be imported
– Leonardo Pessoa
Here also https://code.tutsplus.com/tutorials/managing-cron-jobs-using-python--cms-28231
– Leonardo Pessoa
Thanks, I’ll read the references
– JonesSantos
@Leonardopessoa got into the two posts you left as a reference and I was able to mount a read of the name of all the files in the folder, but I couldn’t do the following: Have I already imported the file? Yes, so I do nothing I already imported the file? No, then import this file
– JonesSantos
Update your response with your new code
– Leonardo Pessoa