资源简介
设计并实现一个DBMS原型系统,可以接受基本的SQL语句,对其进行词法分析、语法分析,然后解释执行SQL语句,完成对数据库文件的相应操作,实现DBMS的基本功能。
代码片段和文件信息
import ply.yacc as yacc
from Lex import tokens
import os
import re
import shutil #删除非空目录的函数 rmtree
root = ‘DBMS‘
conf = ‘sys.dat‘
current_db = ‘‘
#################################################################33
#数据库操作函数定义
# 检查已存在的数据库并返回
def check_db():
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(os.path.join(root conf)):
open(os.path.join(root conf) ‘w‘)
return []
fp = open(os.path.join(root conf) ‘r‘)
names = [name.strip() for name in fp.readlines() if name]
fp.close()
return names
# 创建数据库
def create_db(name):
exisNames = check_db()
if name in exisNames:
return False
fp = open(os.path.join(root conf) ‘a‘)
fp.write(name + ‘\n‘)
fp.close()
os.mkdir(os.path.join(root name))
open(os.sep.join([root name conf]) ‘w‘)
return True
# 显示所有数据库
def show_db(names):
print(names)
# 删除某个数据库
def drop_db(name):
names = check_db()
if name not in names: return False
names.remove(name)
fp = open(os.path.join(root conf) ‘w‘)
for s in names:
fp.write(s + ‘\n‘)
fp.close()
shutil.rmtree(os.path.join(root name))#能够删除非空目录
return True
######################################################
def check_tb():
global current_db
if current_db == ‘‘:
print(‘未选中数据库!‘)
return False
tb_root = os.sep.join([root current_db])
if not os.path.exists(os.path.join(tb_root conf)):
print(‘找不到配置文件‘os.path.join(tb_root conf))
return
tbs = {}
fp = open(os.path.join(tb_root conf) ‘r‘)
for line in fp.readlines():
s = line.strip().split()
tmp = {‘name‘: s[2]}
tmp[‘prop‘] = {‘type‘:s[3]}
if len(s)!=4:
tmp[‘prop‘][‘len‘] = int(s[4])
if int(s[1]) == 1:
tbs[s[0]] = []
tbs[s[0]].append(tmp)
fp.close()
#检查配置文件中的表格是否存在
tmp = list(tbs.keys())
for tb_name in tmp:
if not os.path.exists(os.path.join(tb_root tb_name+‘.txt‘)):
tbs.pop(tb_name)
#检查当前目录中的txt文件是否都在dat中声明
tb_names = [t[:-4] for t in os.listdir(tb_root) if t[-3:] == ‘txt‘]
for t in tb_names:
if tbs.get(t)==None:
os.remove(os.path.join(tb_root t+‘.txt‘))
write_tb_conf(tbs)
# print(tbs)
return tbs
# 写table的conf的函数
def write_tb_conf(tbs):
if current_db == ‘‘:
print(‘未选中数据库!‘)
return False
tb_root = os.sep.join([root current_db])
fp = open(os.path.join(tb_root conf) ‘w‘)
for tb_name tb_elements in tbs.items():
for i in range(len(tb_elements)):
if tb_elements[i][‘prop‘].get(‘len‘):
fp.write(‘%s %d %s %s %d\n‘ % (tb_name i + 1 tb_elements[i][‘name‘] \
tb_elements[i][‘prop‘][‘type‘] \
tb_elements[i]
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 736 2017-05-10 14:15 TestCode\.idea\misc.xm
文件 268 2017-05-10 14:15 TestCode\.idea\modules.xm
文件 459 2017-05-10 14:21 TestCode\.idea\TestCode.iml
文件 49747 2017-05-21 21:41 TestCode\.idea\workspace.xm
文件 6 2017-05-17 14:34 TestCode\DBMS\sys.dat
文件 5 2017-05-20 23:47 TestCode\DBMS\test\f.txt
文件 45 2017-05-21 21:14 TestCode\DBMS\test\student.txt
文件 94 2017-05-21 21:36 TestCode\DBMS\test\sys.dat
文件 15988 2017-05-21 21:38 TestCode\grammars.py
文件 2978 2017-05-16 15:39 TestCode\grammars_t.py
文件 3440 2017-05-21 14:54 TestCode\Lex.py
文件 255 2017-05-16 15:49 TestCode\main.py
文件 47256 2017-05-21 21:38 TestCode\parser.out
文件 12613 2017-05-21 21:38 TestCode\parsetab.py
文件 17324 2017-05-21 21:38 TestCode\__pycache__\grammars.cpython-35.pyc
文件 1496 2017-05-16 15:39 TestCode\__pycache__\grammars_t.cpython-35.pyc
文件 2696 2017-05-21 14:54 TestCode\__pycache__\Lex.cpython-35.pyc
文件 11927 2017-05-21 21:38 TestCode\__pycache__\parsetab.cpython-35.pyc
文件 2395136 2017-04-16 23:28 TestCode\编译原理上机辅导2.ppt
文件 12045 2017-05-21 13:48 TestCode\设计思想.docx
目录 0 2018-07-09 15:48 TestCode\DBMS\test
目录 0 2018-07-09 15:48 TestCode\.idea
目录 0 2018-07-09 15:48 TestCode\DBMS
目录 0 2018-07-09 15:48 TestCode\__pycache__
目录 0 2019-05-20 18:23 TestCode
----------- --------- ---------- ----- ----
2574514 25
- 上一篇:数据库课程设计-学生信息管理系统
- 下一篇:installshield使用指南
相关资源
- 实验1 认识DBMS.docx
- SpringBoot员工管理系统.7z
- SQLSysClrTypes.msi257848
- 阿里云_大数据计算服务_MaxCompute原O
- 旅游管理系统 课程设计
- 乐优商城最新数据库包含tb_spec_group等
- Oracle HR_操作手册_Core HR.PDF
- Oracle官方OCP中文教材
- Plsql.Developer v7.1.5汉化包 注册机 使用
- oracle 11g ocp考试资料
- sqlciper的windows版本
- sqlcipher.exe254864
- MySQL必知必会.pdf.zip
- 2019年最全的银行开户行联行号sql数据
- springboot学生管理系统.zip
- Struts2+spring+Mybatis+mysql+架包相对完善的
- Oracle8i PL SQL 高级程序设计.zip 高清
- 百度地图api 全国所有省市县坐标sql表
- sqlite-netFx451-setup-bundle-x86-2013-1.0.105.
- MySQL 第4版 英文 Paul DuBois
- redgate sql compare 9.0直接安装永久可用破
- Northwind+Pubs+sqlserver+2008+2012+2014
- mysqlclient-1.3.12-cp35-cp35m-win_amd64.whl
- SQL+myclipse物流管理系统
- ReportViewer 12.0+Microsoft System CLR Types f
- sqlcipher加解密数据库
- 基于Struts框架、Hibernate框架开发的w
- SQLReportbuilder2.0完美指导教学
- 基于ACCESS的人事管理系统开发设计报
- 802.3av-2009
评论
共有 条评论