




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2025年P(guān)ython數(shù)據(jù)庫(kù)操作專項(xiàng)訓(xùn)練試卷:MySQL與SQLAlchemy模擬實(shí)戰(zhàn)考試時(shí)間:______分鐘總分:______分姓名:______一、請(qǐng)編寫Python代碼,使用`pymysql`庫(kù)連接到名為`test_db`的MySQL數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)運(yùn)行在本地服務(wù)器(默認(rèn)端口),用戶名為`user`,密碼為`password`。連接成功后,打印連接對(duì)象。二、假設(shè)存在一個(gè)名為`employees`的MySQL表,其結(jié)構(gòu)如下:|ColumnName|DataType|Constraints||:----------|:--------|:-------------||id|INT|PRIMARYKEY,AUTO_INCREMENT||first_name|VARCHAR(50)|NOTNULL||last_name|VARCHAR(50)|NOTNULL||email|VARCHAR(100)|UNIQUE||department|VARCHAR(50)||請(qǐng)使用SQLAlchemy的ORM方式,定義一個(gè)`Employee`模型類來映射該表。三、在上一題定義的`Employee`模型類基礎(chǔ)上,請(qǐng)編寫Python代碼:1.創(chuàng)建一個(gè)指向名為`test_db`的MySQL數(shù)據(jù)庫(kù)的SQLAlchemy引擎(使用`mysql+pymysql://`驅(qū)動(dòng))。2.創(chuàng)建一個(gè)Session類,并實(shí)例化一個(gè)Session對(duì)象。3.使用Session添加一個(gè)新的`Employee`對(duì)象到數(shù)據(jù)庫(kù)中,該員工的信息為:`first_name='John'`,`last_name='Doe'`,`email='john.doe@'`,`department='HR'`。4.提交事務(wù),并關(guān)閉Session。四、繼續(xù)使用第三題的`Employee`模型類和數(shù)據(jù)庫(kù)連接:請(qǐng)編寫Python代碼,使用SQLAlchemyORM查詢`employees`表中`department`為`'Engineering'`的所有員工記錄,并將結(jié)果打印出來。查詢應(yīng)使用`filter()`方法。五、請(qǐng)編寫Python代碼,使用SQLAlchemyORM更新`employees`表中`id`為`5`的員工的`department`字段值為`'Marketing'`。要求使用原生SQL表達(dá)式語言進(jìn)行更新操作,并提交事務(wù)。六、請(qǐng)編寫Python代碼,使用SQLAlchemyORM刪除`employees`表中`id`為`10`的員工記錄。要求使用ORM對(duì)象方式(即先獲取對(duì)象再刪除)進(jìn)行刪除操作,并提交事務(wù)。七、假設(shè)`employees`表和另一個(gè)名為`departments`的表之間存在一對(duì)多關(guān)系,`departments`表結(jié)構(gòu)如下:|ColumnName|DataType|Constraints|Relationship||:----------|:--------|:-------------|:-----------||id|INT|PRIMARYKEY,AUTO_INCREMENT||name|VARCHAR(50)|UNIQUE|||manager_id|INT|FOREIGNKEYREFERENCESemployees(id)|一對(duì)多|請(qǐng)編寫Python代碼,使用SQLAlchemyORM查詢`departments`表中所有記錄,并打印出每個(gè)部門的名稱及其管理者的`first_name`和`last_name`。要求使用`join()`方法進(jìn)行關(guān)聯(lián)查詢。試卷答案一、```pythonimportpymysqlconn=pymysql.connect(host='localhost',user='user',password='password',database='test_db')print(conn)```解析:使用`pymysql.connect()`函數(shù)建立與MySQL數(shù)據(jù)庫(kù)的連接。需要提供數(shù)據(jù)庫(kù)的主機(jī)名(host)、用戶名(user)、密碼(password)和數(shù)據(jù)庫(kù)名(database)。成功連接后,連接對(duì)象`conn`會(huì)被返回,并打印出來。二、```pythonfromsqlalchemyimportColumn,Integer,String,create_enginefromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemy.ormimportsessionmakerBase=declarative_base()classEmployee(Base):__tablename__='employees'id=Column(Integer,primary_key=True,autoincrement=True)first_name=Column(String(50),nullable=False)last_name=Column(String(50),nullable=False)email=Column(String(100),unique=True)department=Column(String(50))```解析:首先導(dǎo)入必要的SQLAlchemy模塊。使用`declarative_base()`創(chuàng)建一個(gè)基類`Base`。然后定義`Employee`類,繼承自`Base`。在類內(nèi)部使用`__tablename__`指定表名。使用`Column`定義表的列,指定列名、數(shù)據(jù)類型(如`Integer`,`String`)和約束(如`primary_key`,`nullable`,`unique`)。三、```pythonfromsqlalchemy.ormimportsessionmaker#創(chuàng)建引擎engine=create_engine('mysql+pymysql://user:password@localhost/test_db')#創(chuàng)建Session類Session=sessionmaker(bind=engine)#實(shí)例化Session對(duì)象session=Session()#創(chuàng)建Employee對(duì)象new_employee=Employee(first_name='John',last_name='Doe',email='john.doe@',department='HR')#添加到Sessionsession.add(new_employee)#提交事務(wù)mit()#關(guān)閉Sessionsession.close()```解析:使用`create_engine()`創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)引擎對(duì)象,連接到指定的數(shù)據(jù)庫(kù)。`sessionmaker()`創(chuàng)建一個(gè)Session類,通過`bind`參數(shù)綁定引擎。實(shí)例化Session類得到Session對(duì)象。創(chuàng)建一個(gè)新的`Employee`對(duì)象,設(shè)置其屬性。使用`session.add()`將對(duì)象添加到Session的臨時(shí)集合中。調(diào)用`mit()`提交事務(wù),將更改保存到數(shù)據(jù)庫(kù)。最后調(diào)用`session.close()`關(guān)閉Session。四、```pythonfromsqlalchemy.ormimportsessionmaker#假設(shè)engine和Session已經(jīng)定義如第三題Session=sessionmaker(bind=engine)session=Session()#使用filter()方法進(jìn)行查詢query=session.query(Employee).filter(Employee.department=='Engineering')results=query.all()#打印結(jié)果forempinresults:print(emp.id,emp.first_name,emp.last_name,emp.email,emp.department)#關(guān)閉Sessionsession.close()```解析:實(shí)例化Session對(duì)象。使用`session.query(Employee)`創(chuàng)建一個(gè)查詢對(duì)象,指定要查詢的模型類。使用`filter()`方法添加過濾條件,這里是`Employee.department=='Engineering'`。調(diào)用`all()`方法執(zhí)行查詢并獲取所有結(jié)果。遍歷結(jié)果并打印每個(gè)員工的詳細(xì)信息。最后關(guān)閉Session。五、```pythonfromsqlalchemyimportselect#假設(shè)engine和Session已經(jīng)定義如第三題Session=sessionmaker(bind=engine)session=Session()#使用原生SQL表達(dá)式語言進(jìn)行更新stmt=select([Employee]).where(Employee.id==5)result=session.execute(stmt)ifresult.rowcount>0:session.execute(Employee.__table__.update().where(Employee.id==5).values(department='Marketing'))mit()#關(guān)閉Sessionsession.close()```解析:實(shí)例化Session對(duì)象。使用`select()`創(chuàng)建一個(gè)SELECT語句對(duì)象,用于檢查id為5的記錄是否存在。執(zhí)行SELECT語句。如果查詢結(jié)果行數(shù)大于0,說明記錄存在,使用`Employee.__table__.update()`創(chuàng)建一個(gè)UPDATE語句,指定where條件和新的值(department='Marketing')。執(zhí)行UPDATE語句并提交事務(wù)。最后關(guān)閉Session。六、```python#假設(shè)engine和Session已經(jīng)定義如第三題Session=sessionmaker(bind=engine)session=Session()#獲取id為10的Employee對(duì)象employee_to_delete=session.query(Employee).filter(Employee.id==10).first()#如果對(duì)象存在,則刪除ifemployee_to_delete:session.delete(employee_to_delete)mit()#關(guān)閉Sessionsession.close()```解析:實(shí)例化Session對(duì)象。使用`session.query(Employee).filter(Employee.id==10).first()`查詢id為10的員工對(duì)象。如果查詢到的對(duì)象不為空(`first()`返回非None),則使用`session.delete()`方法刪除該對(duì)象。調(diào)用`mit()`提交刪除操作。最后關(guān)閉Session。七、```python#假設(shè)engine和Session已經(jīng)定義如第三題Session=sessionmaker(bind=engine)session=Session()#使用join()方法進(jìn)行關(guān)聯(lián)查詢query=session.query(D,Employee.first_name,Employee.last_name).join(Employee).filter(Department.manager_id==Employee.id)results=query.all()#打印結(jié)果forname,first_name,last_nameinresults:print(f"Department:{name},Manager:{first_name}{last_name}")#關(guān)閉Sessionsession.close()```解析:實(shí)例化
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 信息守秘維護(hù)承諾書(6篇)
- 2025年黃山市祁門文化旅游發(fā)展集團(tuán)有限公司招聘5人考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(全優(yōu))
- 個(gè)性化權(quán)益保護(hù)保證承諾書6篇
- 2025年山東省黃河三角洲農(nóng)業(yè)高新技術(shù)產(chǎn)業(yè)示范區(qū)山東省師范類高校學(xué)生從業(yè)技能大賽一、二等獎(jiǎng)獲得者(13人)模擬試卷及答案詳解(有一套)
- 2025年福建省福州市水路運(yùn)輸事業(yè)發(fā)展中心招聘1人模擬試卷及答案詳解(網(wǎng)校專用)
- 2025年湖北省三支一扶招聘考試(2000人)模擬試卷附答案詳解
- 地方戲劇保護(hù)與振興承諾書5篇
- 客戶服務(wù)流程優(yōu)化與工具集成方案
- 江蘇省揚(yáng)州市三校2024-2025學(xué)年高二上學(xué)期10月聯(lián)合測(cè)試地理試卷(解析版)
- 2025年廣東華潤(rùn)電力春季招聘考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(有一套)
- 《大學(xué)生文化安全觀培育研究》
- 基本醫(yī)療保險(xiǎn)用藥管理暫行辦法解讀
- 自編MSA(計(jì)數(shù)型)自動(dòng)分析表
- 2024-2030年陜西省煤炭行業(yè)市場(chǎng)發(fā)展分析及發(fā)展前景預(yù)測(cè)研究報(bào)告
- 汽車吊吊裝 專項(xiàng)施工方案
- 2024年廣東高考地理試題解析課件
- GB/T 3830-2024軟聚氯乙烯壓延薄膜和片材
- 定積分的概念市公開課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件
- 關(guān)注健康遠(yuǎn)離肥胖(教學(xué)設(shè)計(jì))人教版體育二年級(jí)下冊(cè)
- 高處安裝維護(hù)拆除作業(yè)課件-改
- DL∕T 1919-2018 發(fā)電企業(yè)應(yīng)急能力建設(shè)評(píng)估規(guī)范
評(píng)論
0/150
提交評(píng)論