-
大小: 1.22MB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2023-11-10
- 語言: 數(shù)據(jù)庫
- 標(biāo)簽: DBMS??python??
資源簡介
設(shè)計(jì)并實(shí)現(xiàn)一個DBMS原型系統(tǒng),可以接受基本的SQL語句,對其進(jìn)行詞法分析、語法分析,然后解釋執(zhí)行SQL語句,完成對數(shù)據(jù)庫文件的相應(yīng)操作,實(shí)現(xiàn)DBMS的基本功能。

代碼片段和文件信息
import?ply.yacc?as?yacc
from?Lex?import??tokens
import?os
import?re
import?shutil?#刪除非空目錄的函數(shù)?rmtree
root?=?‘DBMS‘
conf?=?‘sys.dat‘
current_db?=?‘‘
#################################################################33
#數(shù)據(jù)庫操作函數(shù)定義
#?檢查已存在的數(shù)據(jù)庫并返回
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
#?創(chuàng)建數(shù)據(jù)庫
def?create_db(name):
????exisNames?=?check_db()
????if?name?in?exisNames:
????????return?False
????fp?=?open(os.path.join(root?conf)?‘a(chǎn)‘)
????fp.write(name?+?‘\n‘)
????fp.close()
????os.mkdir(os.path.join(root?name))
????open(os.sep.join([root?name?conf])?‘w‘)
????return?True
#?顯示所有數(shù)據(jù)庫
def?show_db(names):
????print(names)
#?刪除某個數(shù)據(jù)庫
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(‘未選中數(shù)據(jù)庫!‘)
????????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)
????#檢查當(dāng)前目錄中的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的函數(shù)
def?write_tb_conf(tbs):
????if?current_db?==?‘‘:
????????print(‘未選中數(shù)據(jù)庫!‘)
????????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\編譯原理上機(jī)輔導(dǎo)2.ppt
?????文件??????12045??2017-05-21?13:48??TestCode\設(shè)計(jì)思想.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
評論
共有 條評論