肖宇
摘要:作為計(jì)算機(jī)基礎(chǔ)課程之一,數(shù)據(jù)庫(kù)系統(tǒng)的教學(xué)處于非常核心的地位。經(jīng)典的數(shù)據(jù)庫(kù)原理構(gòu)建在關(guān)系型數(shù)據(jù)庫(kù)基礎(chǔ)上,有著悠久的歷史,但一直是教學(xué)難點(diǎn)之一。Python是一門(mén)開(kāi)源通用型編程語(yǔ)言,有著良好的社區(qū)支持,數(shù)據(jù)庫(kù)模塊規(guī)范齊全。論述了Python編程在提升數(shù)據(jù)庫(kù)教學(xué)的五方面應(yīng)用:作為數(shù)據(jù)庫(kù)客戶端、構(gòu)建事務(wù)管理演示示例、數(shù)據(jù)庫(kù)間遷移、加鎖機(jī)制和數(shù)據(jù)庫(kù)管理等。
關(guān)鍵詞:數(shù)據(jù)庫(kù);Python;事務(wù)管理;關(guān)系模型;數(shù)據(jù)庫(kù)管理系統(tǒng)
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)06-0152-02
1概述
作為一門(mén)趨于成熟的學(xué)科,數(shù)據(jù)庫(kù)包含了大量理論內(nèi)容,如關(guān)系運(yùn)算、查詢、事務(wù)管理、并發(fā)控制等。如何科學(xué)、合理地傳遞這些核心概念是數(shù)據(jù)庫(kù)教學(xué)中的難題之一。典型的數(shù)據(jù)庫(kù)操作語(yǔ)言(如SQL)并不是圖靈完備的,因此在很多場(chǎng)景下,難以使用數(shù)據(jù)庫(kù)管理系統(tǒng)作為平臺(tái)設(shè)計(jì)案例與呈現(xiàn)概念,這導(dǎo)致了數(shù)據(jù)庫(kù)教學(xué)過(guò)程流程圖或偽代碼的大量使用,距離真實(shí)的生產(chǎn)環(huán)境有一些距離。解決這一問(wèn)題的方法之一是使用更豐富的表達(dá)方式展現(xiàn)這些關(guān)鍵概念嘲。
Python作為一門(mén)近年來(lái)發(fā)展迅猛的通用型開(kāi)源編程語(yǔ)言,在人工智能、數(shù)據(jù)分析、網(wǎng)絡(luò)編程、圖像處理、自然語(yǔ)言處理、數(shù)據(jù)庫(kù)編程、大數(shù)據(jù)應(yīng)用、游戲開(kāi)發(fā)等應(yīng)用領(lǐng)域有著良好的生態(tài)支持,在各編程語(yǔ)言位居前列。例如,在2019年10月份的TIOBE世界程序設(shè)計(jì)語(yǔ)言排行榜中,Python位列三甲,環(huán)比增加了1。93%,呈現(xiàn)出良好的上升勢(shì)頭。Python語(yǔ)法簡(jiǎn)潔清晰,學(xué)習(xí)成本低,有著廣泛的社區(qū)資源,因此被廣泛用于非計(jì)算機(jī)專業(yè)的編程教學(xué)。
綜合考慮數(shù)據(jù)庫(kù)教學(xué)中的難點(diǎn)以及Python編程語(yǔ)言的易用性,嘗試使用Python提升數(shù)據(jù)庫(kù)教學(xué)的豐富性與生動(dòng)性。
2數(shù)據(jù)庫(kù)教學(xué)中Python的應(yīng)用場(chǎng)景
在數(shù)據(jù)庫(kù)教學(xué)中,根據(jù)教學(xué)規(guī)律及經(jīng)典理論涉及的場(chǎng)景,可從以下五面應(yīng)用Python增強(qiáng)數(shù)據(jù)庫(kù)教學(xué):
第一,Python作為數(shù)據(jù)庫(kù)編程的客戶端。Python提供了統(tǒng)一的數(shù)據(jù)庫(kù)應(yīng)用接口,針對(duì)不同的數(shù)據(jù)庫(kù)有不同的模塊,如常使用pymysql作為連接和操作MySQL數(shù)據(jù)庫(kù)的模塊,pymongo作為連接和操作mongodb數(shù)據(jù)庫(kù)的模型,cx_oracle作為連接和操作oracle數(shù)據(jù)庫(kù)的模型。通過(guò)這些模塊,可直接在Python環(huán)境中進(jìn)行數(shù)據(jù)庫(kù)管理、數(shù)據(jù)查詢、數(shù)據(jù)操作等活動(dòng)。此外,一些科學(xué)計(jì)算模塊如pandas也集成了以上主流的數(shù)據(jù)庫(kù)模型,可直接將各數(shù)據(jù)庫(kù)中的數(shù)據(jù)讀取為pandas.DataFrame對(duì)象。
第二,使用Python構(gòu)建事務(wù)管理演示示例。事務(wù)管理實(shí)現(xiàn)了將數(shù)據(jù)庫(kù)中的操作作為一個(gè)單元,是數(shù)據(jù)庫(kù)的重要功能之一。在教學(xué)過(guò)程中,往往強(qiáng)調(diào)事務(wù)的流程及其在示例數(shù)據(jù)庫(kù)中實(shí)現(xiàn),而其底層實(shí)現(xiàn)并未深入探究??梢园凑帐聞?wù)的流程,基于Python編寫(xiě)具有提交、保存點(diǎn)設(shè)定和回滾等綜合功能的程序,由此加深學(xué)生對(duì)事務(wù)管理關(guān)鍵方法實(shí)現(xiàn)的理解。
第三,使用Python作為中介實(shí)現(xiàn)不同數(shù)據(jù)庫(kù)間的數(shù)據(jù)遷移。數(shù)據(jù)庫(kù)庫(kù)遷移在項(xiàng)目變遷或者重構(gòu)時(shí)經(jīng)常發(fā)生。即便是不同的關(guān)系型數(shù)據(jù)庫(kù)之間也存在一些差異,更勿論關(guān)系型數(shù)據(jù)庫(kù)庫(kù)與NoSQL數(shù)據(jù)庫(kù)。Python提供了一個(gè)良好的轉(zhuǎn)換環(huán)境,可在同一運(yùn)行環(huán)境中連接遷移目標(biāo)數(shù)據(jù)庫(kù)和被遷移數(shù)據(jù)庫(kù),在Python環(huán)境下完成數(shù)據(jù)內(nèi)容和格式的轉(zhuǎn)換,存入目標(biāo)數(shù)據(jù)庫(kù)中。
第四,使用Pvthon演示不同類(lèi)型的加鎖機(jī)制。加鎖機(jī)制是數(shù)據(jù)庫(kù)實(shí)現(xiàn)并發(fā)運(yùn)行且保證數(shù)據(jù)庫(kù)的ACID特性的基礎(chǔ)。加鎖機(jī)制是數(shù)據(jù)庫(kù)教學(xué)的重點(diǎn)和難點(diǎn)之一。在教學(xué)過(guò)程中,首先可利用Python演示無(wú)加鎖機(jī)制帶來(lái)的可能后果。此外,可利用Python演示在不同加鎖機(jī)制下數(shù)據(jù)共享可能引發(fā)的問(wèn)題及其解決方案。
第五,使用Python管理數(shù)據(jù)庫(kù)對(duì)象。在實(shí)際應(yīng)用中,往往有統(tǒng)一變更數(shù)據(jù)庫(kù)對(duì)象名稱的需求。在數(shù)據(jù)庫(kù)管理系統(tǒng)內(nèi)部并沒(méi)有一種高效的機(jī)制完成這一操作??衫肞ython編寫(xiě)腳本操作數(shù)據(jù)庫(kù)對(duì)象,實(shí)現(xiàn)批處理。此外,也可以編寫(xiě)Python函數(shù)以更好地監(jiān)控與管理數(shù)據(jù)庫(kù)狀態(tài)。
3結(jié)論
雖然技術(shù)取得了長(zhǎng)遠(yuǎn)的發(fā)展,數(shù)據(jù)庫(kù)教學(xué)仍面臨概念復(fù)雜、教學(xué)過(guò)程不夠形象等難題。本文提出了Python在數(shù)據(jù)庫(kù)教學(xué)中的五方面可能應(yīng)用,為數(shù)據(jù)庫(kù)教學(xué)提供了新的思路。當(dāng)然,本文屬于探索性討論,未來(lái)的研究可比較加入Python編程前后學(xué)生對(duì)數(shù)據(jù)庫(kù)的接受情況,更加嚴(yán)謹(jǐn)?shù)貦z驗(yàn)這些教學(xué)設(shè)計(jì)的效果。