山东科技大学小学期数据库大作业

一天写完了。。。。。挂这里就当是造福后人了,虽然写的这么乱估计也没什么人看,就当是见笑了

选题:

¨CREATE TABLE <表名> (<列名><数据类型>[<列完整性约束条件>][<列名><数据类型>[<列完整性约束条件>]][<表完整性约束条件>]
¨ALTER TABLE <表名> [ADD <新列名><数据类型>[<列完整性约束>]] [DROP<列完整性约束名>][MODIFY <列名><数据类型>]
¨要求:

   (1)能够以命令方式执行;

   (2)能够以程序方式执行a

   (3)提供课程设计报告。

效果如下:


代码如下:

#! usr/bin/python #coding=utf-8
import re,os
print '''
```````````````````````````*******``.............................```**`*`*******
``````````````````````````*`********`..........................````**```********
`````````````````````````****`*``**````````..................``*`***************
````````````*********```**```````````````````````````````````*******************
******************``*```````````````****``````````````*``***********************
******************````````````````*`*******```````````******************@*******
***************````````````````````******`````````````*````*@*******************
******```````````````````````````****````*``*`*`````````````**********@@********
******``````````````````````````****```````````````````````````*****@@@@****`***
*```````````````````````````````***`*````````````*``*````````````**@*@@*********
``````````````````````````````******```````````````***`````````````**********@*`
````````````````**@@*````````*`****```````````````****````````````````**********
````````....```****@@**```````*`*``````````````````**``**```````````````********
...```........`.@**@@@@``````````````````````````````**`**```````````````*******
.````........`*.***@@*````````````````````*@@@@@@*`*``*````````````````````***@*
..``.......````*****```````````````*****@@`.**@*@@@***``````````````````````****
.``........````````````````````````****@@```@@@@@@@@**``````````````````````****
.`.........````````````````````````************@@`*```````````````````````````**
...........```.`````````````````````*````*****`**```````````````````````````````
.............````````````````````````````````````````````..`````````````````````
`.........``*********``````.```````````````````````````````.````````````````````
`.`.....`@@*@@@@@@@@****``````````````````````````````````......````````````````
````....`@@@*@@@@@@@@@**`....`````````````````````````````.......```````````````
........****@@@@@@@@@@@*````````````````````````..``````````````````````````````
......```@**@@@@@@@@@***`````````````````````.```.`````````````````````````````*
....`````***@@@@@@*****`````````````````````````````.``````````````````````````*
....````*****@********``.````````````````````````````````````````````````````***
....````**************`````````````````````````````````````````````````````*****
....`````**@@@@@@*******`*```````````*``````````````````````````````````````****
....`.`.`******@@@@@@@@*```````````****``````````````````````````````````````***
......````***********@@@@@@`@@@@@*@***`````````````````````````````````````**`**
......```````************@**********```````````````````````````````````````*****
.......``````*`******```*****`*****``````````````````````````````````````*``****
.....````````````````````````````````````````````````````````````````````*******
...````````````````````````````````````````````````````````````````````*`*******
....```````````````````````````````````````````````````````````````````****`****
...`````````````````````````````````````````````````````````````````````**`*****
..``````````````````````````````````````````````````````````````````````********
.``````````````````````````````````````````````````````````````````*````********
..````````````````````````````````````````````````````````````````````**********
author:sdust-iot-15-2-朱虹霖
下面请开始你的表演:
示例:
1.创建表
create table information (
	  `account` char(10) not null,
	 `password` char(10) not null,
	`tem` char(32)  ,
	 `wet`    char(32)  ,
	`lit`    char(32),
	     primary key( `account`)
	     );
2.查看所有表名
show tables;
3.查看表结构
desc information;
4.增加列
alter table information add id int(10);
5.删除列
alter table information drop id
6.修改列
alter table information modify id int(10)
7.删除表
drop table information;

'''.decode('utf-8').encode('gbk')
if(os.path.isfile('data.txt')!=True ):#初始化,如果不存在文件就创建
	file_ready =open('data.txt','w+')
	file_ready.close()
flag_exit=0
while(1):
	print "doge>",
	if (flag_exit==1):
		break
	stopword = ';'#读取到;时结束输入
	operation = ''
	for line in iter(raw_input, stopword):
		if line =="":
			pass
		else:
			if(line[-1]==";"):
				operation+=line[:-1]
				break
		operation += line + '\n'
	operation=operation.decode('gbk').encode('utf-8')
	file_object_r =open('data.txt')
	try:
		data = file_object_r.read( )
		if (data==""):#文件为空,就进行以下初始化操作
			data="[]"
			list= eval(data)#强转为list
			list.append('{\'name\':\'strcture\'}')#list的第一个对象为数据库名和数据库结构,list[0].append(list_thislist)即可添加当前数据库进去
		else:
			list= eval(data)
		if(operation.replace(" ","").replace("\n","").lower()=="showtables"):
			for key in eval(str(list[0])):
				print key.decode('utf-8').encode('gbk')
		else:
			if (operation.replace(" ","").replace("\n","").lower()[:11]=="createtable"): #创建数据库
				sql_name= operation.split("(")[0].replace(" ","").replace("\n","")[11:]#以'('为界分割,去空格,createtable往后的字符,从而取出要创的数据库名
				if (sql_name!=""):
					list_this_sql= {sql_name:[]}#用于添加到list[0]中管理整个数据库结构
				else:
					print "数据库名为空,请重新编写数据库语句".decode('utf-8').encode('gbk')
				create_information = operation.replace(operation.split("(")[0],"").replace("\n","")
				list_patterns = create_information.split(',')
				primary_key=""
				for i in range (len(list_patterns)):#循环读取每一组创建元素的限制
					pattern_name,pattern_length,pattern_type,notnull="",0,"",False
					patterns_describe=re.split(" " "{1,}",list_patterns[i])#以一至多个空格为界,进行划分
					for j in range (len(patterns_describe)):
						if (patterns_describe[j]!=""and patterns_describe[j]!="(" and patterns_describe[j]!=")"and patterns_describe[j].replace(" ","").replace("`","")!=""):#第一个非空且不为特殊符号的变量即为元素名
							if (patterns_describe[j]=="primary"):
								sample_primarykey = r"\(.*?\)"
								primary_key=re.findall(sample_primarykey,list_patterns[i] ,re.M)[0].replace(')','').replace('(','').replace('`','').replace(" ","")
								#print "primary_key  "+primary_key
								break
							else:
								pattern_name=patterns_describe[j].replace('`','').replace("(","")
								#print "pattern_name  "+pattern_name
								break
					sample_length = r"\([0-9]*?\)"#匹配数据长度
					if (i==0):
						pattern_length=int(re.findall(sample_length,list_patterns[i][1:],re.M)[0].replace(')','').replace('(',''))#如果是第一行就要去掉第一个(
					else:
						if (pattern_name!=""):
							if (len(re.findall(sample_length,list_patterns[i],re.M))!=0):#排除uniquekey 的情况
								pattern_length=int(re.findall(sample_length,list_patterns[i],re.M)[0].replace(')','').replace('(',''))
					#print "length  "+str(pattern_length)
					sample_type = r"[^ ]*?\(" #匹配数据类型
					if (i==0):
						pattern_type=re.findall(sample_type,list_patterns[i][1:],re.M)[0].replace(')','').replace('(','')
					else:
						pattern_type=re.findall(sample_type,list_patterns[i],re.M)[0].replace(')','').replace('(','')
					#print "type  "+pattern_type
					sample_notnull = r"[ ]*?not[ ]*?null"#匹配not null
					if (len(re.findall(sample_notnull,list_patterns[i][1:],re.M))!=0):
						notnull=True
					if (pattern_name!="" and pattern_type!="" ):#最后如果名字和数据类型都非空,就加入该条目
						list_this_sql[sql_name].append([pattern_name,pattern_type,pattern_length,False,notnull])
					else:
						if (pattern_name!="" and pattern_type=="")or(pattern_type.lower()!="char"and pattern_type.lower()!=("int")and pattern_type.lower()!="boolen"and pattern_type.lower()!="key"):
							print ("第"+str(i+1)+"组数据有误请重写数据库语句").decode('utf-8').encode('gbk')
							#break
							#break#跳出整个循环
				if (primary_key!=""):#最后设置主键
					for num in range (len(list_this_sql[sql_name])):
						#print   "key             "+list_this_sql[sql_name][num][0]+primary_key
						if (list_this_sql[sql_name][num][0]==primary_key):
							list_this_sql[sql_name][num][3]=True
				check_flag=0
				for i in range(len(list)):
					if (i==0):
						pass
					else :
						if (sql_name==eval(str(list[i]))[0][0]):
							check_flag=1
				if (check_flag==0):
					list_first	=eval(str(list[0]))
					list_first [sql_name]=list_this_sql
					list[0]= list_first#存进第一个管理所有的数据库的表里
					list_this_sql_foruse=[sql_name]
					for num in range (len(list_this_sql[sql_name])):
						list_this_sql_foruse.append(list_this_sql[sql_name][num][0])
					list.append("["+str(list_this_sql_foruse)+"]")
					file_object = open('data.txt',"w")
					file_object.write(str(list))
					file_object .close()
					print "创建成功".decode('utf-8').encode('gbk')
				else:
					print "已存在数据表,请重新创建".decode('utf-8').encode('gbk')
			else:
				if (operation.replace(" ","").replace("\n","").lower()[:9]=="droptable"): #删除数据库
					delete_flag=0
					sql_name_delete= operation.split("(")[0].replace(" ","").replace("\n","")[9:]#以'('为界分割,去空格,删除数据库往后的字符,从而取出要删的数据库名
					for i in range(len(list)):
						if (i==0):
							pass
						else:
							if (sql_name_delete==eval(str(list[i]))[0][0]):
								del list[i]
								dict_delete=eval(str(list[0]))
								del dict_delete[sql_name_delete]
								list[0]=dict_delete
								delete_flag=1
								file_object = open('data.txt',"w")
								file_object.write(str(list))
								file_object .close()
					if  (delete_flag==1):
						print "删除完成".decode('utf-8').encode('gbk')
					else :
						print "没有该表".decode('utf-8').encode('gbk')
				else :
					if (operation.replace(" ","").replace("\n","").lower()[:10]=="altertable"): #更改数据库
						operation_split=re.split(" " "{1,}",operation)#以一至多个空格为界,进行划分
						sql_name_alter=operation_split[2]
						order=operation_split[3]
						column_name=operation_split[4].replace("\n","")
						check_flag_fix=0
						for i in range(len(list)):
							if (i==0):
								pass
							else :
								if (sql_name_alter==eval(str(list[i]))[0][0]):
									check_flag_fix=1
						if(check_flag_fix==0):
							print ("不存在该表"+sql_name_alter+",请重新填写语句").decode('utf-8').encode('gbk')
						else:
							if (order.lower()=="add"):
								 column_ty=operation_split[5].replace("\n","")
								 column_type=column_ty.split("(")[0].replace("\n","")
								 column_length=column_ty.split("(")[1].replace(")","").replace(" ","").replace("\n","")
								 dict_add1=eval(str(list[0]))
								 list_add1=dict_add1[sql_name_alter][sql_name_alter]
								 add_flag=0
								 for i in range(len(list_add1)):
									 if(list_add1[i][0]==column_name):
										add_flag=1
								 if(add_flag==1):
									 print (sql_name_alter+"已存在对应栏目"+column_name+",无法添加").decode('utf-8').encode('gbk')
								 else:
									list_for_add=[]
									list_for_add.append(column_name)
									list_for_add.append(column_type)
									list_for_add.append(column_length)
									list_for_add.append(False)
									list_for_add.append(False)
									dict_add1[sql_name_alter][sql_name_alter].append(list_for_add)
									list[0]=dict_add1
									for i in range (len(list)):
										if (i==0):
											pass
										else:
											list_cookie=eval(str(list[i]))
											if (list_cookie[0][0]==sql_name_alter):
												list_cookie[0].append(column_name)
												list[i]=list_cookie
												file_object = open('data.txt',"w")
												file_object.write(str(list))
												file_object .close()
												print (sql_name_alter+"增加新栏目"+column_name+"成功").decode('utf-8').encode('gbk')
							else :
								if  (order.lower()=="drop"):
									dict_drop1=eval(str(list[0]))
									list_add1=dict_drop1[sql_name_alter][sql_name_alter]
									drop_flag=0
									for i in range(len(list_add1)):
										if(list_add1[i][0]==column_name):
											drop_flag=1
									if(drop_flag==0):
										print (sql_name_alter+"不存在对应栏目"+column_name+",无法删除").decode('utf-8').encode('gbk')
									else:
										list_for_add=[]
										list_for_add.append(False)
										list_for_add.append(False)
										for i in range (len(dict_drop1[sql_name_alter][sql_name_alter])):
											if(eval(str(dict_drop1[sql_name_alter][sql_name_alter][i]))[0]==column_name):
												del dict_drop1[sql_name_alter][sql_name_alter][i]
												list[0]=dict_drop1
										for i in range (len(list)):
											if (i==0):
												pass
											else:
												list_cookie=eval(str(list[i]))
												if (list_cookie[0][0]==sql_name_alter):
													for j in range (len(list_cookie[0])):
														if(list_cookie[0][j]==column_name):
															del list_cookie[0][j]
													list[i]=list_cookie
													file_object = open('data.txt',"w")
													file_object.write(str(list))
													file_object .close()
													print (sql_name_alter+"删除"+column_name+"完成").decode('utf-8').encode('gbk')
								else:
									if(order.lower()=="modify"):
										dict_drop1=eval(str(list[0]))
										list_add1=dict_drop1[sql_name_alter][sql_name_alter]
										drop_flag=0
										for i in range(len(list_add1)):
											if(list_add1[i][0]==column_name):
												drop_flag=1
										if(drop_flag==0):
											print (sql_name_alter+"不存在对应栏目"+column_name+",将直接添加").decode('utf-8').encode('gbk')
										else:
											list_for_add=[]
											list_for_add.append(False)
											list_for_add.append(False)
											for i in range (len(dict_drop1[sql_name_alter][sql_name_alter])):
												if(eval(str(dict_drop1[sql_name_alter][sql_name_alter][i]))[0]==column_name):
													del dict_drop1[sql_name_alter][sql_name_alter][i]
													list[0]=dict_drop1
											for i in range (len(list)):
												if (i==0):
													pass
												else:
													list_cookie=eval(str(list[i]))
													if (list_cookie[0][0]==sql_name_alter):
														for j in range (len(list_cookie[0])):
															if(list_cookie[0][j]==column_name):
																del list_cookie[0][j]
														list[i]=list_cookie
														file_object = open('data.txt',"w")
														file_object.write(str(list))
														file_object .close()
														print (sql_name_alter+"删除"+column_name+"完成").decode('utf-8').encode('gbk')
										column_ty=operation_split[5].replace("\n","")
										column_type=column_ty.split("(")[0].replace("\n","")
										column_length=column_ty.split("(")[1].replace(")","").replace(" ","").replace("\n","")
										dict_add1=eval(str(list[0]))
										list_add1=dict_add1[sql_name_alter][sql_name_alter]
										add_flag=0
										for i in range(len(list_add1)):
											if(list_add1[i][0]==column_name):
												add_flag=1
										if(add_flag==1):
											pass
										else:
											list_for_add=[]
											list_for_add.append(column_name)
											list_for_add.append(column_type)
											list_for_add.append(column_length)
											list_for_add.append(False)
											list_for_add.append(False)
											dict_add1[sql_name_alter][sql_name_alter].append(list_for_add)
											list[0]=dict_add1
											for i in range (len(list)):
												if (i==0):
													pass
												else:
													list_cookie=eval(str(list[i]))
													if (list_cookie[0][0]==sql_name_alter):
														list_cookie[0].append(column_name)
														list[i]=list_cookie
														file_object = open('data.txt',"w")
														file_object.write(str(list))
														file_object .close()
														print (sql_name_alter+"增加新栏目"+column_name+"成功").decode('utf-8').encode('gbk')
					else:
						if (operation.replace("\n","").replace(" ","").lower()[:4]=="desc"):
							desc_flag=0
							desc_name=operation.replace("\n","").replace(" ","").lower()[4:]
							for i in range(len(list)):
								if (i==0):
									pass
								else:
									if (desc_name==eval(str(list[i]))[0][0]):
										desc_flag=1
							if(desc_flag==1):
								print ("   元素名    数据类型   数据长度  是否主键   是否非空").decode('utf-8').encode('gbk')
								desc_list=eval(str(list[0]))[desc_name][desc_name]
								for i in range (len(desc_list)):
									print ("%09s %09s  %09s  %09s %09s" % (desc_list[i][0],desc_list[i][1],desc_list[i][2],desc_list[i][3],desc_list[i][4])).decode('utf-8').encode('gbk')
							else:
								print  (desc_name+"表名错误,请重新填写").decode('utf-8').encode('gbk')
						else:
							if(operation.replace("\n","").replace(" ","").lower()=="exit"):
								print  "按任意键退出程序".decode('utf-8').encode('gbk')
								flag_exit=1
								i=input()
							else:
								print '数据库语言错误,请重新填写'.decode('utf-8').encode('gbk')
	# except Exception:
	#   	 print '数据库语言错误,请重新填写'.decode('utf-8').encode('gbk')
	finally:
		 file_object_r.close()







#pyinstaller -F
# sql_name  数据库名  ,pattern_name 元素名,pattern_type 数据类型,pattern_length 长度,isEmpty 是否能为空 ,primary_key 主键
#                      元素名  数据类型   数据长度  primary_key是否主键   ,是否必须not null
# {表名 tablename,[ [ "account" , "int", 0    ,     true  ,                  false                                                ]]}
#  表名  tablename      值  值  值  值
# [        tablename     id accout name value ],
# [                     0,0,0,0]



	# create table information (
	#   `account` char(10) not null,
	#  ‘password’ char(10) not null,
	# ‘tem’ char(32)  ,
	#  ‘wet’    char(32)  ,
	# ‘lit’    char(32),
	#      primary key( `account`)
	#      );
	#alter table information add id int(10) not null
	#alter table information drop id
	#alter table information modify id int(10) not null
	# 先切开 alter table  ,然后判定informaition ,再判定下一个
关于如何打包成exe可执行文件参照我上一篇博客

http://blog.youkuaiyun.com/qq_32545287/article/details/73292264

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值