python三行代码实现数据库创表字段的大小写转换

需求

最近需要创建几个库,源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;

得到很满意的结果,复制后,直接执行语句创表。八个表,一分钟搞定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值