版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2025年P(guān)ython數(shù)據(jù)庫操作培訓(xùn)試卷高頻考點(diǎn)解析考試時(shí)間:______分鐘總分:______分姓名:______一、選擇題(每題2分,共20分)1.在Python中使用`sqlite3`庫連接數(shù)據(jù)庫時(shí),以下哪個(gè)語句是創(chuàng)建連接對象的正確方式?A.`conn=sqlite3.open(db_name)`B.`conn=sqlite3.connect('db_name.db')`C.`conn=Database('db_name.db')`D.`conn=sqlite3.create_connection('db_name.db')`2.以下哪個(gè)方法用于執(zhí)行一條SQL查詢語句并獲取所有結(jié)果集?A.`cursor.execute()`B.`cursor.fetchone()`C.`cursor.fetchall()`D.`mit()`3.當(dāng)你需要在SQL語句中插入變量值以避免SQL注入時(shí),以下哪種做法是不推薦的?A.使用參數(shù)化查詢,如`cursor.execute("INSERTINTOtable(col)VALUES(%s)",(value,))`B.使用字符串格式化,如`sql="INSERTINTOtable(col)VALUES(%s)"%value;cursor.execute(sql)`C.使用參數(shù)化查詢,如`cursor.execute("INSERTINTOtable(col)VALUES(?)",(value,))`D.使用占位符,如`cursor.execute("INSERTINTOtable(col)VALUES(:val)",{"val":value})`4.對于`INSERT`,`UPDATE`,`DELETE`等SQL語句執(zhí)行后,為了保存所做的更改,需要調(diào)用連接對象的哪個(gè)方法?A.`mit()`B.`cursor.rollback()`C.`mit()`D.`conn.rollback()`5.在處理數(shù)據(jù)庫操作時(shí),如果希望確保即使發(fā)生異常,數(shù)據(jù)庫連接也能被關(guān)閉,推薦使用哪種方法?A.使用`try...finally...`結(jié)構(gòu),在`finally`中關(guān)閉連接。B.使用`withconn:...`語句塊。C.顯式調(diào)用`conn.close()`,并放在`try`塊中。D.不需要特殊處理,`try...except`即可。6.以下哪個(gè)方法用于從結(jié)果集中獲取下一行數(shù)據(jù),通常在循環(huán)中與`fetchall()`配合使用?A.`cursor.fetchone()`B.`cursor.fetchmany()`C.`cursor.next()`D.`cursor.scroll()`7.當(dāng)執(zhí)行`cursor.execute("SELECT*FROMusersWHEREage>%s",(18,))`后,如果需要獲取查詢到的第2行到第4行數(shù)據(jù),應(yīng)該使用哪個(gè)方法?A.`cursor.fetchone(range(2,5))`B.`cursor.fetchmany(3)`C.`cursor.fetchmany(range(2,4))`D.`cursor.fetchoffset(2,3)`8.關(guān)于數(shù)據(jù)庫事務(wù),以下哪種描述是錯(cuò)誤的?A.事務(wù)保證了數(shù)據(jù)的原子性。B.在事務(wù)中,`commit`或`rollback`只能執(zhí)行一次。C.使用事務(wù)可以確保多個(gè)操作要么全部成功,要么全部失敗。D.事務(wù)會一直占用數(shù)據(jù)庫資源,直到顯式結(jié)束。9.在Python數(shù)據(jù)庫編程中,`exceptsqlite3.OperationalError`通常用來捕獲哪種類型的錯(cuò)誤?A.SQL語法錯(cuò)誤。B.連接被拒絕的錯(cuò)誤。C.數(shù)據(jù)違反約束(如主鍵沖突)的錯(cuò)誤。D.傳入?yún)?shù)類型不匹配的錯(cuò)誤。10.如果一個(gè)數(shù)據(jù)庫連接對象`conn`是通過`withsqlite3.connect('mydb.db')asconn:`創(chuàng)建的,那么在`with`語句塊執(zhí)行完畢后,是否需要顯式調(diào)用`conn.close()`?A.是,需要顯式調(diào)用。B.否,不需要,`with`語句會自動關(guān)閉連接。二、填空題(每空2分,共20分)1.在Python的`sqlite3`模塊中,創(chuàng)建游標(biāo)對象通常使用`cursor=conn.`____________()`。2.執(zhí)行非`SELECT`類的SQL語句(如`INSERT`,`UPDATE`,`DELETE`)后,需要調(diào)用連接對象的`______()`方法來提交事務(wù)。3.當(dāng)數(shù)據(jù)庫操作發(fā)生異常,且希望撤銷所有在此事務(wù)中進(jìn)行的更改時(shí),應(yīng)調(diào)用連接對象的`______()`方法。4.為了防止SQL注入攻擊,推薦在執(zhí)行SQL語句時(shí)使用______查詢,通過占位符傳遞參數(shù)。5.如果想在Python代碼中關(guān)閉一個(gè)已經(jīng)打開的數(shù)據(jù)庫連接,應(yīng)調(diào)用該連接對象的`______()`方法。6.使用`fetchall()`方法獲取查詢結(jié)果時(shí),如果結(jié)果集非常大,一次性加載到內(nèi)存中可能會導(dǎo)致______。7.當(dāng)使用`withconn:...`語句管理數(shù)據(jù)庫連接時(shí),如果`with`塊中的代碼正常執(zhí)行完畢,即使沒有顯式調(diào)用,事務(wù)也會自動被______。8.在參數(shù)化查詢中,如果SQL語句使用`?`作為占位符,傳遞參數(shù)的元組或列表應(yīng)該放在`execute()`方法的第二個(gè)參數(shù)位置,例如:`cursor.execute("INSERTINTOt(a,b)VALUES(?,?)",______)`。9.在編寫需要處理用戶輸入并插入到SQL語句中的代碼時(shí),絕對不能直接將用戶輸入拼接到SQL字符串中,否則極易遭受______攻擊。10.`cursor.execute("SELECTnameFROMusersWHEREage=%sORDERBYageDESCLIMIT1OFFSET2",(25,))`這條語句中,`LIMIT1OFFSET2`的作用是______。三、簡答題(每題5分,共15分)1.簡述在Python中使用`with`語句管理數(shù)據(jù)庫連接和游標(biāo)的優(yōu)點(diǎn)。2.解釋什么是SQL注入,并說明使用參數(shù)化查詢?nèi)绾畏乐筍QL注入。3.當(dāng)你編寫一個(gè)需要同時(shí)更新用戶信息并插入用戶訂單的Python腳本時(shí),為什么使用數(shù)據(jù)庫事務(wù)很重要?請說明理由。四、編程題(共25分)假設(shè)你正在使用`sqlite3`庫操作一個(gè)名為`company.db`的SQLite數(shù)據(jù)庫,該數(shù)據(jù)庫有一個(gè)名為`employees`的表,表結(jié)構(gòu)如下:*`id`(INTEGER,PRIMARYKEY)*`name`(TEXT)*`department`(TEXT)*`salary`(REAL)請根據(jù)以下要求,編寫相應(yīng)的Python代碼段(注意:無需建立連接、創(chuàng)建表等初始化代碼,假設(shè)表和連接`conn`已經(jīng)存在,且`conn`是有效的連接對象,游標(biāo)`cursor`也已經(jīng)創(chuàng)建):1.(5分)編寫代碼,查詢`employees`表中所有`department`為`'Sales'`的員工信息(`id`,`name`,`department`,`salary`),并將查詢結(jié)果按`salary`降序排列。使用`fetchall()`獲取所有結(jié)果,并打印每一行數(shù)據(jù)。2.(10分)編寫代碼,為名為`'Alice'`的員工增加`500`元工資。要求:在修改前,檢查該員工是否存在;如果存在,則更新其`salary`;如果不存在,則打印`"Employeenotfound."`。整個(gè)更新操作需要放在一個(gè)事務(wù)中,如果更新過程中發(fā)生任何異常(如連接問題),則需要回滾事務(wù)。最后,無論成功與否,都應(yīng)關(guān)閉游標(biāo)。3.(10分)編寫代碼,向`employees`表中插入一條新員工記錄。新員工的`name`為`'Bob'`,`department`為`'Engineering'`,`salary`為`45000.00`。要求:在插入前,檢查`name`是否已存在于表中(即`name`字段是否違反唯一約束);如果不存在,則插入記錄;如果存在,則打印`"Employeewiththisnamealreadyexists."`。同樣,整個(gè)插入操作需要放在一個(gè)事務(wù)中,并確保在操作結(jié)束后關(guān)閉游標(biāo)。如果插入失?。ɡ缬捎诩s束違反),事務(wù)應(yīng)自動回滾。---試卷答案一、選擇題1.B解析:`sqlite3.connect('db_name.db')`是創(chuàng)建數(shù)據(jù)庫連接對象的標(biāo)準(zhǔn)方法。2.C解析:`fetchall()`用于獲取查詢結(jié)果集中所有行,返回一個(gè)列表。3.B解析:字符串格式化拼接SQL會暴露變量內(nèi)容,存在SQL注入風(fēng)險(xiǎn),應(yīng)使用參數(shù)化查詢。4.C解析:連接對象`conn`的`commit()`方法用于提交事務(wù)。5.B解析:`withconn:...`結(jié)構(gòu)能自動管理資源,即使在代碼拋出異常也能確保`conn`在塊結(jié)束時(shí)關(guān)閉。6.A解析:`fetchone()`返回下一行數(shù)據(jù),通常在循環(huán)中使用以逐行處理結(jié)果。7.B解析:`fetchmany(3)`獲取接下來的3行數(shù)據(jù),符合題目要求獲取第2到第4行。8.D解析:事務(wù)結(jié)束后,數(shù)據(jù)庫資源會被釋放,事務(wù)本身不一直占用資源。9.B解析:`OperationalError`通常與連接、事務(wù)、SQL語句執(zhí)行等操作相關(guān),如連接拒絕。10.B解析:使用`with`語句會自動執(zhí)行必要的清理工作,包括關(guān)閉連接,無需顯式調(diào)用`close()`。二、填空題1.cursor解析:`conn.cursor()`是創(chuàng)建游標(biāo)對象的標(biāo)準(zhǔn)方法。2.commit解析:`commit()`用于保存`INSERT`,`UPDATE`,`DELETE`等非SELECT語句的事務(wù)更改。3.rollback解析:`rollback()`用于撤銷當(dāng)前事務(wù)中所有未提交的更改。4.參數(shù)化/參數(shù)化查詢解析:參數(shù)化查詢通過占位符傳遞參數(shù),有效防止SQL注入。5.close解析:`close()`方法用于關(guān)閉數(shù)據(jù)庫連接,釋放資源。6.內(nèi)存溢出/MemoryError解析:`fetchall()`一次性加載所有結(jié)果到內(nèi)存,大數(shù)據(jù)量可能導(dǎo)致內(nèi)存不足。7.提交/Commit解析:`with`語句塊正常結(jié)束時(shí),如果存在未提交的事務(wù),會自動調(diào)用`commit()`。8.(name,salary)解析:傳遞參數(shù)應(yīng)使用元組或列表,與SQL語句中的占位符位置對應(yīng)。9.SQL注入解析:直接拼接用戶輸入到SQL字符串是SQL注入攻擊的主要途徑。10.跳過前2條記錄,返回接下來的1條記錄解析:`LIMIT1OFFSET2`表示從結(jié)果集的第3條記錄開始,返回第1條記錄。三、簡答題1.答:使用`with`語句管理數(shù)據(jù)庫連接和游標(biāo)的優(yōu)點(diǎn)在于:*自動資源管理:能確保即使在代碼塊執(zhí)行過程中發(fā)生異常,也能自動關(guān)閉游標(biāo)和連接,避免資源泄露。*簡化代碼:無需手動編寫`try...finally...`來關(guān)閉資源,使代碼更簡潔易讀。*保證一致性:提供了一種標(biāo)準(zhǔn)化的方式來管理數(shù)據(jù)庫資源生命周期。2.答:SQL注入是一種攻擊技術(shù),攻擊者通過在輸入中注入惡意SQL代碼,使得應(yīng)用程序執(zhí)行的SQL語句與其預(yù)期不同,從而可能訪問、修改或刪除數(shù)據(jù)庫中的數(shù)據(jù)。使用參數(shù)化查詢防止SQL注入的原理是:*分離SQL邏輯與數(shù)據(jù):SQL語句的文本與用戶輸入的數(shù)據(jù)分開處理。SQL語句使用占位符(如`%s`,`?`)標(biāo)記數(shù)據(jù)位置,數(shù)據(jù)作為單獨(dú)參數(shù)傳遞。*數(shù)據(jù)庫解釋:數(shù)據(jù)庫引擎會將參數(shù)值按照預(yù)定義的類型安全地插入到SQL語句中,而不是直接將它們作為SQL代碼的一部分來解釋執(zhí)行。*避免代碼執(zhí)行:即使用戶輸入包含SQL關(guān)鍵字或惡意代碼,由于參數(shù)被數(shù)據(jù)庫當(dāng)作數(shù)據(jù)處理,這些代碼不會被執(zhí)行,從而防止了注入攻擊。3.答:使用數(shù)據(jù)庫事務(wù)非常重要,原因如下:*原子性:保證事務(wù)內(nèi)的所有操作要么全部成功,要么全部失敗回滾,不會處于中間狀態(tài),確保數(shù)據(jù)狀態(tài)的一致性。*一致性:防止操作序列導(dǎo)致數(shù)據(jù)庫從一個(gè)一致性狀態(tài)轉(zhuǎn)移到另一個(gè)不一致的狀態(tài)。*隔離性:確保事務(wù)的執(zhí)行不會受到其他并發(fā)事務(wù)的干擾,保持?jǐn)?shù)據(jù)的獨(dú)立性和準(zhǔn)確性。*持久性:事務(wù)一旦提交,其對數(shù)據(jù)庫的更改就是永久性的,即使系統(tǒng)故障也不會丟失。在本例中,更新員工工資和插入訂單是一系列關(guān)聯(lián)操作,必須確保兩者都成功或都失敗。如果只用單個(gè)操作更新工資,可能員工工資已變但訂單未創(chuàng)建,或反之。使用事務(wù)可以保證這兩個(gè)操作作為一個(gè)整體執(zhí)行,要么都完成,要么都撤銷到操作前狀態(tài),維護(hù)了業(yè)務(wù)邏輯的正確性。四、編程題1.```python#假設(shè)conn和cursor已經(jīng)創(chuàng)建cursor.execute("SELECTid,name,department,salaryFROMemployeesWHEREdepartment='Sales'ORDERBYsalaryDESC")results=cursor.fetchall()forrowinresults:print(row)#cursor在with塊外創(chuàng)建時(shí),需要手動關(guān)閉#cursor.close()```解析:使用`execute()`執(zhí)行帶條件的查詢語句,`fetchall()`獲取結(jié)果,循環(huán)打印每一行。`ORDERBY`用于排序。2.```pythontry:#先檢查員工是否存在cursor.execute("SELECT1FROMemployeesWHEREname='Alice'")ifcursor.fetchone()isNone:print("Employeenotfound.")else:#員工存在,更新工資cursor.execute("UPDATEemployeesSETsalary=salary+500WHEREname='Alice'")mit()#提交更新exceptExceptionase:print(f"Anerroroccurred:{e}")conn.rollback()#發(fā)生異常,回滾finally:cursor.close()#關(guān)閉游標(biāo)```解析:使用`try...except...finally`結(jié)構(gòu)。`try`中先查詢確認(rèn)員工存在,若存在則更新并`commit`。`except`捕獲任
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年A股市場分析白皮書
- 2026年中藥調(diào)劑(中藥用量控制)試題及答案
- 2026年住房供給側(cè)結(jié)構(gòu)性改革背景下的政策動向
- 2025年高職財(cái)務(wù)管理(財(cái)務(wù)會計(jì))試題及答案
- 2025年大學(xué)管理學(xué)(市場營銷原理)試題及答案
- 2025年大學(xué)漢語言文學(xué)(文學(xué)概論)試題及答案
- 2025年大學(xué)大三(操作系統(tǒng))進(jìn)程管理實(shí)踐測試試題及答案
- 2025年中職物聯(lián)網(wǎng)應(yīng)用技術(shù)(物聯(lián)網(wǎng)感知技術(shù))試題及答案
- 2025年大學(xué)現(xiàn)代種業(yè)技術(shù)(基因育種應(yīng)用)試題及答案
- 2025年高職(網(wǎng)絡(luò)營銷與直播電商)直播電商階段測試題及答案
- 2025年全國職業(yè)院校技能大賽中職組(母嬰照護(hù)賽項(xiàng))考試題庫(含答案)
- 2026江蘇鹽城市阜寧縣科技成果轉(zhuǎn)化服務(wù)中心選調(diào)10人考試參考題庫及答案解析
- 托管機(jī)構(gòu)客戶投訴處理流程規(guī)范
- 2026年及未來5年中國建筑用腳手架行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y方向研究報(bào)告
- 銀行客戶信息安全課件
- 2026年四川單招單招考前沖刺測試題卷及答案
- 2026年全國公務(wù)員考試行測真題解析及答案
- 2025新疆華夏航空招聘筆試歷年難易錯(cuò)考點(diǎn)試卷帶答案解析
- (2025)70周歲以上老年人換長久駕照三力測試題庫(附答案)
- 金太陽山西省名校三晉聯(lián)盟2025-2026學(xué)年高三上學(xué)期12月聯(lián)合考試語文(26-177C)(含答案)
- 2026年泌尿護(hù)理知識培訓(xùn)課件
評論
0/150
提交評論