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

来源:互联网 发布:java构造方法重载例题 编辑:程序博客网 时间:2024/06/05 21:54

需求

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

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

原创粉丝点击