• 大小: 1.22MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-10
  • 语言: 数据库
  • 标签: DBMS  python  

资源简介

设计并实现一个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.xml

     文件        268  2017-05-10 14:15  TestCode\.idea\modules.xml

     文件        459  2017-05-10 14:21  TestCode\.idea\TestCode.iml

     文件      49747  2017-05-21 21:41  TestCode\.idea\workspace.xml

     文件          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


评论

共有 条评论