Python流行ORM框架sqlalchemy的简单使用
1. 了解ORM
ORM全称Object-Relational Mapping,即对象关系映射,是一种通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中的方法。ORM将数据库和应用程序代码中的对象相连接,开发人员可以用面向对象的方式操作数据,而不用显式地编写SQL语句。
ORM屏蔽了数据存储和操作的底层细节,使用起来比传统的数据库操作方式更加方便快捷、代码更具可读性、可扩展性和可维护性。
2. sqlalchemy介绍
sqlalchemy是Python中最流行的ORM框架之一,支持多种数据库类型,并且提供了高度灵活的查询语言和事务管理机制。
sqlalchemy的结构分为三层:
第一层是DBAPI,即Python Database API,提供了与数据库进行连接、执行SQL语句以及获取结果集的接口。
第二层是sqlalchemy的核心层,提供了一套封装了多种DBAPI的SQL表达式语言和SQL执行引擎。
第三层是ORM层,提供了一套面向对象的API,允许开发人员将Python对象映射到关系数据库。
3. sqlalchemy的安装
可以使用pip来安装sqlalchemy:
pip install sqlalchemy
4. sqlalchemy的基本使用
4.1 创建数据库表
在使用sqlalchemy之前,需要先创建数据库表。
使用sqlalchemy创建一个学生表,包括学生姓名和性别:
CREATE TABLE students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(50) NOT NULL,
gender VARCHAR(10) NOT NULL
);
接下来,我们通过sqlalchemy来创建这个表:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
# 创建engine
engine = create_engine('sqlite:///students.db', echo=True)
# 创建Base对象
Base = declarative_base()
# 定义Student对象
class Student(Base):
__tablename__ = 'students'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
gender = Column(String(10), nullable=False)
def __repr__(self):
return f""
# 创建表
Base.metadata.create_all(engine)
上面的代码中,我们通过create_engine函数来创建了一个Sqlite数据库引擎,并且将echo参数设置为True,表示在控制台输出执行的SQL语句。然后,我们创建了一个Base对象,并且在此基础上定义了Student对象,用于映射到students表中。最后,我们调用metadata.create_all方法生成students表。
4.2 插入数据
接下来,我们向students表中插入一个学生记录:
from sqlalchemy.orm import sessionmaker
# 创建Session类
Session = sessionmaker(bind=engine)
# 创建Session实例
session = Session()
# 插入一条记录
student = Student(name='张三', gender='男')
session.add(student)
session.commit()
# 查询记录
result = session.query(Student).all()
print(result)
这段代码中,我们使用session.add方法将一个Student对象插入到数据库中,使用session.commit()方法来提交数据,并使用session.query方法查询所有学生信息。
4.3 查询数据
使用sqlalchemy非常方便地进行数据查询,可以使用filter、order_by等函数来筛选数据,也可以使用聚合函数来对数据进行统计。
下面是一个查询所有学生信息的例子:
students = session.query(Student).all()
for student in students:
print(student.name, student.gender)
使用filter函数来筛选数据,以查询所有女生信息为例:
female_students = session.query(Student).filter(Student.gender=='女').all()
for student in female_students:
print(student.name, student.gender)
使用order_by函数来排序,以查询所有男生信息并按照名字进行升序排序为例:
male_students = session.query(Student).filter(Student.gender=='男').order_by(Student.name).all()
for student in male_students:
print(student.name, student.gender)
使用聚合函数来统计数据,以查询女生人数为例:
female_count = session.query(Student).filter(Student.gender=='女').count()
print(f'女生人数为{female_count}')
4.4 更新数据
使用sqlalchemy非常方便地进行数据更新,可以使用update函数来更新数据。
以将学生张三的性别更新为女为例:
session.query(Student).filter(Student.name=='张三').update({'gender': '女'})
session.commit()
4.5 删除数据
使用sqlalchemy非常方便地进行数据删除,可以使用delete函数来删除数据。
以删除姓名为张三的学生为例:
session.query(Student).filter(Student.name=='张三').delete()
session.commit()
5. 总结
sqlalchemy是Python中最流行的ORM框架之一,使用起来非常方便快捷,可以将数据库操作与面向对象编程成功地结合。在实际项目中,我们可以根据需要使用sqlalchemy来操作不同类型的数据库,从而提高开发效率和代码质量。