обновление базы данных с локального диска не происходит с помощью pymysql - PullRequest
0 голосов
/ 06 июня 2019

У меня есть сценарий, в котором я загружаю несколько файлов .csv с сервера sftp на свой локальный сервер linux, используя скрипт python (downloadsftp.py), после загрузки файлов я переименовываю эти файлы csv и запускаю (updatedb.py), вся эта работа cron была создана.

Я вижу, что файлы, которые я загружаю с SFTP-сервера, обновляются, но когда задание cron запускается автоматически в указанное время, оно загружает не обновленные файлы в базу данных, а старые или предыдущие файлы. права доступа к файлам - chmod 777 для всех загружаемых файлов, что достигается с помощью другого задания cron.

Вот мои сценарии:

downloadsftp.py

filelist = server.listdir()
for filename in filelist:
    filedate = re.search(".*\.csv$", filename)
    if filedate:
        print (filename)
        server.get("/sftpfolder/" + filename, "/opt/currentdata/" + filename)
        print("latest files downloaded to /opt/currentdata now proceeeding with creating backup")
        server.get("/sftpfolder/" + filename, "/opt/backupdata/" + filename)
        print("backup files created in /opt/backupdata")
        server.remove("/sftpfolder/" + filename)
        print ("cleaning files from FTP server")

print ("SFTP process completed closing FTP connection")
server.close()

print ("Bye Bye SFTP")

print ("Renaming files for updating database")
print(" ")

dir= "/opt/currentdata"

for newname in os.listdir(dir):
         if(newname.split('.')[0]=='CAS1' and "J" in newname):
                print newname,'BASD.csv'
                shutil.move(newname, "BASD.csv")

for newname in os.listdir(dir):
         if(newname.split('.')[0]=='LST' and "N" in newname):
                print newname,'CVGH.csv'
                shutil.move(newname, "CVGH.csv")

Dbupdate.py

def csv_to_mysql(load_sql, host, user, password):
    '''
    This function load a csv file to MySQL table according to
    the load_sql statement.
    '''
    try:
        con = pymysql.connect(host=host,
                                user=user,
                                password=password,
                                autocommit=True,
                                local_infile=1)
        print('Connected to DB: {}'.format(host))
        # Create cursor and execute Load SQL
        cursor = con.cursor()
        cursor.execute("truncate table mdb.data1;")
        cursor.execute("truncate table mdb.data2;")
        print("truncated old values from database...updating current values")
        cursor.execute(load_sql)
        cursor.execute(load_sql1)
        print('Succuessfully updated the table from currentdata dir')
        con.close()

    except Exception as e:
        print('Error: {}'.format(str(e)))
        sys.exit(1)

# Execution Example
load_sql = """ LOAD DATA LOCAL INFILE '/opt/currentdata/BASD.csv' INTO TABLE mdb.data1\
 FIELDS TERMINATED BY ';' ENCLOSED BY '"' IGNORE 1 LINES; """

load_sql1 = """ LOAD DATA LOCAL INFILE '/opt/currentdata/CVGH.csv' INTO TABLE mdb.data2\
 FIELDS TERMINATED BY ';' ENCLOSED BY '"' IGNORE 1 LINES; """

host = 'xxx'
user = 'dd'
password = 'ww'

csv_to_mysql(load_sql, host, user, password)

Задания Cron:

30 21 * * * cd /opt/currentdata/ && python /opt/currentdata/downloadsftp.py >> /opt/scriptlogs/sftp.log 2>&1
33 21 * * * cd /opt/currentdata/ && python /opt/currentdata/dbupdate.py >> /opt/scriptlogs/db1all.log 2>&1

Я понятия не имею, почему обновленные файлы не помещаются в базу данных, но старые файлы могут кто-нибудь помочь здесь, чтобы понять, если есть проблема с cron или загрузкой и перемещением файла на сервере, потому что, когда я запускаю сценарий dbupdate.py вручную из каталога он корректно обновляется.

...