sql文件解析

最近自己想把sql文件包含的数据结构解析出来,用python解析,也算是学习python吧。

开始肯定写的比较naive:

原始的sql文件是:

/*
Navicat MySQL Data Transfer


Source Server         : 11
Source Server Version : 50515
Source Host           : 192.168.106.61:3306
Source Database       : game_002


Target Server Type    : MYSQL
Target Server Version : 50515
File Encoding         : 65001


Date: 2015-05-23 20:31:26
*/


SET FOREIGN_KEY_CHECKS=0;


-- ----------------------------
-- Table structure for `test`
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `test1` int(11) NOT NULL DEFAULT '0',
  `test2` varchar(24) DEFAULT NULL,
  PRIMARY KEY (`test1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- ----------------------------
-- Records of test
-- ----------------------------

解析代码是:

import sys

type_num = 1
type_str = 2

class data_struct:
	name = ""
	type = 1
	type_str_ = ""
class store:
	table_name = "";
	vari_list = []
def issubstr(s1, s2):
	return s1 in s2
num = 0
store_data = store()
f = open("test.sql")
is_begin_parse = False
line = f.readline()


def get_between(str):
		num1 = line.find("`", 1)
		num2 = line.find("`", num1+1)
		if num2 -num1 < 0:
			return Null
		res = line[(num1+1):num2]
		#print res
		return res
while line:
	if issubstr("CREATE TABLE", line):
		store.table_name = get_between(line)
		is_begin_parse = True
	elif issubstr("PRIMARY KEY", line):
		line = f.readline()
		continue
	elif issubstr("ENGINE=InnoDB DEFAULT", line):
		is_begin_parse = False
	elif is_begin_parse == True:
		num = num +1
		data_struct_ = data_struct()
		data_struct_.name = get_between(line)
		if issubstr("varchar", line):
			data_struct_.type = type_str
			data_struct_.type_str_ = "std::string"
		store.vari_list.insert(num, data_struct_)
	line = f.readline()
f.close()

def get_member_function(meber_name, type):
	string_begin = "\n " + type + " get_" + meber_name + "(){\n		return " + meber_name + ";\n	}"
	return string_begin
def set_member_function(meber_name, type):
	string_begin = "\n void set_" + meber_name + "(" + type + " "+ meber_name + "_){\n		" + meber_name + " = " + meber_name + "_;   \n}\n"
	return string_begin
def get_member(meber_name, type):
	string_begin = "\n		" + type + " " + meber_name + ";"
	return string_begin
	
res_file_header_name = store.table_name + ".h"
res_file_source_name = store.table_name + ".cc"

res_file_header = open(res_file_header_name, "wb+")
res_file_source = open(res_file_source_name, "wb+")
string_begin = "#ifndef _" + store.table_name + "_\n#define _" + store.table_name + "_\n" + "#include <string>\n"
res_file_header.write(string_begin)
string_begin = "namespace {\nclass " + store.table_name + "{\n"
res_file_header.write(string_begin)

string_begin = "	public:\n"
res_file_header.write(string_begin)
for data_ in store.vari_list:
	data_name = data_.name + "_"
	if data_.type == 1:
		res_file_header.write(get_member_function(data_.name, data_.type_str_))
		res_file_header.write(set_member_function(data_.name, data_.type_str_))
	elif data_.type == 2:
		res_file_header.write(get_member_function(data_.name, data_.type_str_))
		res_file_header.write(set_member_function(data_.name, data_.type_str_))
		
string_begin = "\n	private:"
res_file_header.write(string_begin)
for data_ in store.vari_list:
	data_name = data_.name + "_"
	if data_.type == 1:
		res_file_header.write(get_member(data_.name, data_.type_str_))
	elif data_.type == 2:
		res_file_header.write(get_member(data_.name, data_.type_str_))
res_file_header.write("\n}\n}\n#endif")
res_file_header.close()





 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值