需求
最近需要创建几个库,源sql是从oracle数据库导出的,需写入到mysql数据库内。oracle所有字段都是大写的,但是mysql所有字段都是小写的。为统一,mysql数据库的字段都需要是小写的。
例如:有这么一个表 his_price表,oralce导出sql是这样的:
CREATE TABLE `his_price` (
`EXCHANGE_TYPE` varchar(4) NOT NULL DEFAULT '',
`STOCK_CODE` varchar(6) NOT NULL DEFAULT '',
`INIT_DATE` decimal(10,0) NOT NULL DEFAULT '0',
`MONEY_TYPE` varchar(3) NOT NULL DEFAULT '',
`RATE_PRICE` decimal(9,8) NOT NULL DEFAULT '0.00000000',
`BUSINESS_BALANCE` decimal(19,2) NOT NULL DEFAULT '0.00',
`CLOSE_FLAG` char(1) NOT NULL DEFAULT '',
`CLOSING_PRICE` decimal(18,3) NOT NULL DEFAULT '0.000',
`WEIGHTAVG_PRICE` decimal(18,3) NOT NULL DEFAULT '0.000',
`STKCODE_STATUS` char(1) NOT NULL DEFAULT '',
`HIGH_PRICE` decimal(18,3) NOT NULL DEFAULT '0.000',
`LOW_PRICE` decimal(18,3) NOT NULL DEFAULT '0.000',
`ASSET_PRICE` decimal(16,4) NOT NULL DEFAULT '0.0000',
`LAST_PRICE` decimal(16,4) NOT NULL DEFAULT '0.0000'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
其实这个表字段并不多,手工改也很快,最多看着敲一遍。但是一共需要导入8个表,其中有1个表有100多个字段,这要完全手工改,显然不是最好的方案。
实现
想了一会,可以用python写一个语句,用lower()方法将所有大写字母转换成小写语句:
>>>a = """CREATE TABLE `asset` (
`INIT_DATE` decimal(10,0) NOT NULL DEFAULT '0',
`FUND_ACCOUNT` varchar(18) NOT NULL DEFAULT '',
`MONEY_TYPE` varchar(3) NOT NULL DEFAULT '',
`FUND_ASSET` decimal(19,2) NOT NULL DEFAULT '0.00',
`SECU_MARKET_VALUE` decimal(19,2) NOT NULL DEFAULT '0.00',
`OPFUND_MARKET_VALUE` decimal(19,2) NOT NULL DEFAULT '0.00',
`TOTAL_ASSET` decimal(19,2) NOT NULL DEFAULT '0.00',
`PROD_MARKET_VALUE` decimal(19,2) NOT NULL DEFAULT '0.00',
`OPT_MARKET_VALUE` decimal(19,2) NOT NULL DEFAULT '0.00',
`OFCASH_MARKET_VALUE` decimal(19,2) NOT NULL DEFAULT '0.00',
`PFUND_MARKET_VALUE` decimal(19,2) NOT NULL DEFAULT '0.00',
`HKFUND_MARKET_VALUE` decimal(19,2) NOT NULL DEFAULT '0.00',
`SECUM_MARKET_VALUE` decimal(19,2) NOT NULL DEFAULT '0.00'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
"""
>>>b = a.lower()
>>>b
"create table `asset` (\n `init_date` decimal(10,0) not null default '0',\n `fund_account` varchar(18) not null default '',\n `money_type` varchar(3) not null default '',\n `fund_asset` decimal(19,2) not null default '0.00',\n `secu_market_value` decimal(19,2) not null default '0.00',\n `opfund_market_value` decimal(19,2) not null default '0.00',\n `total_asset` decimal(19,2) not null default '0.00',\n `prod_market_value` decimal(19,2) not null default '0.00',\n `opt_market_value` decimal(19,2) not null default '0.00',\n `ofcash_market_value` decimal(19,2) not null default '0.00',\n `pfund_market_value` decimal(19,2) not null default '0.00',\n `hkfund_market_value` decimal(19,2) not null default '0.00',\n `secum_market_value` decimal(19,2) not null default '0.00'\n) engine=innodb default charset=utf8;\n"
输出b, 已经都转化成小写字母了。但是放在sql里面执行,显然是不行的。因为里面有很多 \n 符号没处理。
想了一下,可以试试print() 方法
>>>print(b)
create table `asset` (
`init_date` decimal(10,0) not null default '0',
`fund_account` varchar(18) not null default '',
`money_type` varchar(3) not null default '',
`fund_asset` decimal(19,2) not null default '0.00',
`secu_market_value` decimal(19,2) not null default '0.00',
`opfund_market_value` decimal(19,2) not null default '0.00',
`total_asset` decimal(19,2) not null default '0.00',
`prod_market_value` decimal(19,2) not null default '0.00',
`opt_market_value` decimal(19,2) not null default '0.00',
`ofcash_market_value` decimal(19,2) not null default '0.00',
`pfund_market_value` decimal(19,2) not null default '0.00',
`hkfund_market_value` decimal(19,2) not null default '0.00',
`secum_market_value` decimal(19,2) not null default '0.00'
) engine=innodb default charset=utf8;
得到很满意的结果,复制后,直接执行语句创表。八个表,一分钟搞定。