ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Python进阶教程:数据库操作入门

Python进阶教程:数据库操作入门 目录Python进阶教程数据库操作入门一、什么是数据库二、SQL 基础三、SQLite内置数据库四、参数化查询防注入五、ORM 简介六、实战学生成绩管理系统总结Python进阶教程数据库操作入门本文是Python 入门教程系列的第 7 篇。前面介绍了并发编程本篇讲解 Python 中数据库操作以 SQLite 和 MySQL 为例。一、什么是数据库数据库Database是有组织存储数据的仓库支持高效增删改查CRUD。常用关系型数据库SQLite轻量级单文件适合学习和小型应用MySQL / MariaDB最流行的开源数据库PostgreSQL功能强大的开源数据库关系型数据库用SQL结构化查询语言操作数据。二、SQL 基础-- 建表CREATETABLEusers(idINTEGERPRIMARYKEYAUTOINCREMENT,nameTEXTNOTNULL,ageINTEGER,emailTEXTUNIQUE);-- 插入INSERTINTOusers(name,age,email)VALUES(Alice,20,aliceexample.com);-- 查询SELECT*FROMusersWHEREage18;-- 更新UPDATEusersSETage21WHEREnameAlice;-- 删除DELETEFROMusersWHEREid1;三、SQLite内置数据库Python 自带 sqlite3 模块无需安装任何东西importsqlite3# 连接文件不存在会自动创建connsqlite3.connect(demo.db)cursorconn.cursor()# 建表cursor.execute( CREATE TABLE IF NOT EXISTS students ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, score REAL ) )# 插入数据cursor.execute(INSERT INTO students (name, score) VALUES (?, ?),(张三,88.5))cursor.execute(INSERT INTO students (name, score) VALUES (?, ?),(李四,92.0))conn.commit()# 查询cursor.execute(SELECT * FROM students)forrowincursor.fetchall():print(row)# 关闭连接conn.close()四、参数化查询防注入永远不要用字符串拼接 SQL应使用参数化查询防止 SQL 注入importsqlite3 connsqlite3.connect(demo.db)cursorconn.cursor()# 错误示范有注入风险# name input(输入姓名)# cursor.execute(fSELECT * FROM students WHERE name {name})# 正确做法占位符 ?name张三cursor.execute(SELECT * FROM students WHERE name ?,(name,))print(cursor.fetchall())conn.close()五、ORM 简介直接写 SQL 较繁琐实际项目常用ORM对象关系映射如 SQLAlchemy# pip install sqlalchemyfromsqlalchemyimportcreate_engine,Column,Integer,String,Floatfromsqlalchemy.ormimportdeclarative_base,sessionmaker Basedeclarative_base()classStudent(Base):__tablename__students_ormidColumn(Integer,primary_keyTrue)nameColumn(String(50),nullableFalse)scoreColumn(Float)# 连接数据库enginecreate_engine(sqlite:///orm_demo.db)Base.metadata.create_all(engine)# 增删改查Sessionsessionmaker(bindengine)sessionSession()studentStudent(name王五,score95.5)session.add(student)session.commit()resultsession.query(Student).filter(Student.score90).all()forsinresult:print(s.name,s.score)session.close()六、实战学生成绩管理系统综合运用所学知识实现一个简单的学生成绩管理importsqlite3classScoreManager:def__init__(self,dbscores.db):self.connsqlite3.connect(db)self.cursorself.conn.cursor()self.cursor.execute( CREATE TABLE IF NOT EXISTS students ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, score REAL ) )self.conn.commit()defadd(self,name,score):self.cursor.execute(INSERT INTO students (name, score) VALUES (?, ?),(name,score))self.conn.commit()print(f添加成功{name}{score}分)deflist_all(self):self.cursor.execute(SELECT * FROM students)forrowinself.cursor.fetchall():print(row)deftop(self,n3):self.cursor.execute(SELECT * FROM students ORDER BY score DESC LIMIT ?,(n,))forrowinself.cursor.fetchall():print(f高分榜{row})defclose(self):self.conn.close()# 使用示例mgrScoreManager()mgr.add(张三,88.5)mgr.add(李四,92.0)mgr.add(王五,95.5)mgr.list_all()mgr.top(2)mgr.close()总结本篇介绍了 SQL 基础、SQLite 内置数据库、参数化查询防注入、ORM 概念并用学生成绩管理系统串联实战。下一篇将介绍数据分析入门NumPy 与 Pandas敬请期待
返回列表