Python流行ORM框架sqlalchemy的简单使用

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来操作不同类型的数据库,从而提高开发效率和代码质量。

后端开发标签