mysql - 如果表存在但它是空的,则在sql表中加载数据
问题描述
我正在编写一个连接到 SQL 数据库的 python 脚本。它基于文件夹路径创建数据库,并基于相应数据库中这些文件夹中存在的文件创建表。
我的以下代码一切正常,但我想对其进行优化,使其仅在表为空时才将数据加载到表中。
以下代码的问题在于,每当我运行它时,它都会检查表是否不存在,它会创建表,如果表已经存在,它会继续前进,但是当将数据加载到表中时,每次运行脚本,它将数据从文件 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(' ')
如果表中不存在,我想要的是类似加载数据的东西。你认为,有可能或我应该怎么做才能实现这一目标?
解决方案
推荐阅读
- javascript - 如何在 mailgun 电子邮件模板(Node js)中分配变量?
- python - ModuleNotFoundError:没有名为“sklearn.preprocessing._data”的模块
- sql - 识别 ID 和日期表的缺失日期
- c# - 单元测试 Dapper/SqlConnection 查询
- c++ - C++ typeid 模板值到 union 没有可接受的转换
- azure - F# Azure 函数的 Cosmos DB 绑定无法绑定
- powershell - 在 Powershell 中:如果文本文件包含存储在另一个文本文件中的一组单词,则从文本文件中删除行
- docker - Spring-Boot 应用程序标准输出写入 Docker 容器上的日志文件
- python - 我没有得到正确的输出来检查字符串是否为回文
- unit-testing - 如何验证接口的方法是否被调用