资源简介
设计并实现一个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使用指南
相关资源
- 在线词典项目v1.1.zip
- php mysql经典留言本源码 代码通俗易懂
- PHP MySQL 物流管理 数据库文件
- PHP MySQL 技术 毕业设计 物流管理系统
- php mysql 在线作业管理系统
- pb 酒店管理系统(代码、sql数据库)
- 图书管理系统 PHP MYSQL实现
- [PHP MySQL]图书馆管理系统前后台全部代
- sqlserver学习ppt 全套共18个
- 通过SqlBulkCopy对象从Excel中批量导入到
- 基于PHP+MYSQL的学生成绩管理系统
- Spring+Struts2+Hibernate人力资源管理系统
- 我自己写php mysql聊天室
- sql server 2000经典范例
- 完整的php mysql js用户注册与登陆
-
xm
l技术结合Surpac软件实现矿体三维 - docker-apollo-master.zip
- AccessPort.zip
- AccessPort_64位
- 东城大学在线答疑系统struts2+spring带
- MYSQL作业提交作业批改系统.zip
- Maven搭建Spring+Mybatis+MySql
- 破解oracle密码的工具orabf-v0[1].7.6.zip
- MySQL中文手册api帮助文档
- linux_mysql5.1.66x86_64.zip
- postgresql分布式安装部署
- PostgreSQL-从入门到精通
-
purexm
l:引发数据库技术新一轮革命 - CentOS版64位pdksh-5.2.14
- 用NetBackup恢复Oracle数据库到异机
川公网安备 51152502000135号
评论
共有 条评论