我几乎没有编码经验,但是我的任务是编写python脚本来完成任务。我要使用此功能的方法是进入目录(目录将始终具有相同的名称)并在SQL文件中搜索特定行。我想将_tenant_name添加到数据库名称的末尾。而且,如果未压缩ROW_FORMAT,我想将其更改为压缩。目前,该功能没有执行任何操作,而我试图找出原因。
我已经使它起作用了。如何将旧文件的内容写入新文件,而又不留空白?
import os
import re
import time
import logging
tenant_name = 'tenant_name' #args.tenant_name
def do_schemaImport():
directory = os.getcwd()
for filename in os.listdir(directory):
schema = os.path.basename(filename)
new_schema = schema + '_' + tenant_name
f1 = open(filename, 'r')
f2 = open(directory + "/" + new_schema + ".sql", 'w')
line = f1.readlines()
while line in f1:
db = re.compile(r"DROP DATABASE{1}|^USE{1}|CREATE
DATABASE{1}")
compression = re.compile(r"ENGINE=INNODB*")
if re.match(db, f1) in line:
line.replace(schema, new_schema)
logging.info(line)
if re.match(compression, f1) in line and re.match(r";","ROW_FORMAT=COMPRESSED;", f1):
line = line.replace("ROW_FORMAT=COMPRESSED;")
f2.write(line)
f1.close()
f2.close()
do_schemaImport()
示例SQL文件。
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `configurationservice` /*!40100
DEFAULT CHARACTER SET utf8 */;
USE `configurationservice`;
--
-- Table structure for table `class`
--
DROP TABLE IF EXISTS `class`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `class` (
`class_id` bigint(20) NOT NULL AUTO_INCREMENT,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`class_id`),
UNIQUE KEY `XIE1EVENTDATACLASSVALUE` (`value`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8
ROW_FORMAT=COMPRESSED;
/*!40101 SET character_set_client = @saved_cs_client */;