загрузить данные в таблицу sql, если таблица существует, но она пуста - PullRequest
0 голосов
/ 26 апреля 2019

Я пишу скрипт на python, который подключается к базе данных SQL.Он создает базы данных на основе путей к папкам и таблиц на основе файлов, присутствующих в этих папках в соответствующих базах данных.

Мой следующий код делает все хорошо, но я хочу оптимизировать его таким образом, чтобы он загружал данные втолько таблицы, если таблицы пустые.

Проблема со следующим кодом заключается в том, что всякий раз, когда я запускаю его, он проверяет, не присутствует ли таблица, создает ли она таблицу, и если таблица уже существует, она перемещаетсяно когда дело доходит до загрузки данных в таблицы, каждый раз, когда запускается скрипт, он загружает данные в таблицы из файла 1.

Я хочу настроить его таким образом, чтобы он загружал данные только в таблицы и толькоесли данных уже нет в нем.Если данные присутствуют, код перемещается дальше.

Я пытался сделать что-то вроде создать таблицу, если не существует , но не удалось.

hostname = 'hostname'
username = 'usrname'
password = '12345'
database = 'd1'
portname = '12345'
from mysql.connector.constants import ClientFlag
import pathlib
import sys
import os
import mysql.connector
import subprocess
from subprocess import *
import time
from termcolor import colored


print(colored('\nConnecting SQL database using host = '+hostname+' , username = '+username+' , port = ' +portname+ ' , database = ' +database+'.','cyan',attrs=['reverse','blink']))
print('\n')
myConnection = mysql.connector.connect(user=username, passwd=password,host=hostname,port=portname,database=database,client_flags=[ClientFlag.LOCAL_FILES])
myCursor =myConnection.cursor()

rootDir35 = '/mnt/Wdrive/pc35/SK/E13'
filenames35 = os.listdir(rootDir35)
root35 = pathlib.Path(rootDir35)
non_empty_dirs35 = {str(p35.parent) for p35 in root35.rglob('*') if p35.is_file()}
#35
try:
        print(colored('**** Starting Performing SQL-Queries for pc35 **** \n','green',attrs=['reverse','blink'] ))
        for f35 in non_empty_dirs35:
                dB35 = f35.replace('/','_') or f35.replace('-','_')
                for dirName35, subdirList35, fileList35 in os.walk(rootDir35):
                        if dirName35 == f35:
                                p1135= 'Current Working Directory is:   %s' %f35+ ' '
                                print(colored(p1135,'cyan'))
                                createDB35='CREATE DATABASE IF NOT EXISTS %s' %dB35
                                myCursor.execute(createDB35)
                                p135='Database of pc35 Created :        %s' %dB35
                                print(colored(p135,'cyan'))
                                useDB35='use %s' %dB35
                                myCursor.execute(useDB35)
                                myConnection.commit()
                                p235= 'Database in use :               %s' %dB35
                                print(colored(p235,'cyan'))
                                print(' ')
                                for fname35 in fileList35:
                                        completePath35 ='%s' %dirName35+'/%s'%fname35
                                        tblname35 = os.path.basename(fname35).split('.')[0]
                                        if '-' not in tblname35:
                                                if '.' not in tblname35:
                                                       sql35= 'CREATE TABLE if not exists %s (Datum varchar(50), Uhrzeit varchar(13), UpsACT_V varchar(6), UpsPRE_V varchar(6), IpsACT_A varchar(6), IpsPRE_A varchar(6), PpsACT_W varchar(6), PpsPRE_W varchar(10), UelACT_V varchar(6), UelPRE_V varchar(6), IelACT_A varchar(8), IelPRE_A varchar(8), PelACT_W varchar(8), PelPRE_W varchar(8), Qlad_Ah varchar(10), Qlast_Ah varchar(10))' %(tblname35)
                                                        myCursor.execute(sql35)
                                                        myConnection.commit()
                                                        test35 = 'The Table                %s              '              %tblname35+               'in database             %s             '%dB35+'is created'
                                                        print(colored(test35,'yellow'))
                                                        loadData35= "LOAD DATA LOCAL INFILE  '%s' "  %completePath35 + "INTO TABLE %s" %tblname35
                                                        myCursor.execute(loadData35)
                                                        myConnection.commit()
                                                        p335='Data loaded from file      %s              ' %fname35
                                                        p435='               into table %s              ' %tblname35
                                                        p535 = p335 + p435
                                                        print(colored(p535,'green'))
                                                        print(' ')
        print(colored('**** SQL-Queries for pc35 successfully executed **** \n','green',attrs=['reverse','blink']))
except:
        print(' ')
        print(colored('**** SQL queries for pc35 doesnot executed. Please refer to the report or user manual for more details ****','red',attrs=['reverse','blink']))
        print(' ')

Что я хочуэто что-то вроде загрузки данных, если не существует в таблице .как вы думаете, возможно ли это или что я должен сделать, чтобы добиться этого?

...