如何使用SQLAlchemy进行数据库操作

什么是SQLAlchemy

SQLAlchemy是一个Python ORM(Object Relational Mapping)框架,让我们可以将面向对象的操作映射到关系型数据库中,而不必直接操作数据库。它封装了原生的SQL语句,提供了更加优雅的API,极大提高开发效率。SQLAlchemy被广泛应用于Flask、Django等Python Web框架中。

SQLAlchemy的安装

使用pip命令即可完成安装:

pip install sqlalchemy

创建数据库连接

在使用SQLAlchemy之前,需要首先创建一个数据库连接。下面是一个连接MySQL数据库的例子:

from sqlalchemy import create_engine

USER = 'root'

PASSWORD = 'password'

HOST = 'localhost'

PORT = '3306'

DB = 'test'

# 创建数据库连接

engine = create_engine(f'mysql+pymysql://{USER}:{PASSWORD}@{HOST}:{PORT}/{DB}')

其中,engine是核心对象之一,它负责连接数据库,并且可以直接执行SQL语句或调用ORM API操作数据库。

创建表

在操作数据库前,需要通过SQLAlchemy创建表,可以在表中定义字段的数据类型、长度、约束等,如下所示:

from sqlalchemy import Column, Integer, String

from sqlalchemy.ext.declarative import declarative_base

# 创建orm基类

Base = declarative_base()

class User(Base):

__tablename__ = 'users'

id = Column(Integer, primary_key=True)

name = Column(String(50))

age = Column(Integer)

上述代码中,使用了SQLAlchemy orm框架的主要技术之一——声明式(Declarative)。其中,Base是orm的基类,继承它之后的类均为数据表的“映射类”,每个类的实例都代表一行数据。

在User类中,__tablename__ 属性用于指示这个类对应的表名为users,使用Column定义了id、name和age三个字段,其中id为主键。在定义字段时,每个字段都可以指定字段名、类型、长度、约束等,更多信息可以参考SQLAlchemy的官方文档。

创建表结构

定义好映射类之后,需要在数据库中创建对应的表结构。可以通过调用Base类的metadata属性来实现:

Base.metadata.create_all(engine)

Base.metadata.create_all()方法会在目标数据库中检查是否有已经存在的表结构,如果不存在,则会创建;如果已存在,则不会进行任何操作。如果需要强制创建,则可以使用Base.metadata.drop_all()方法。

插入数据

定义好表之后,可以通过SQLAlchemy的orm API插入数据。示例如下:

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)

session = Session()

user = User(name='Lucy', age=18)

session.add(user)

session.commit()

session.close()

首先,我们通过sessionmaker将数据库引擎与Session类绑定,然后创建一个Session实例用于和数据库交互。在添加新数据时,首先创建了一个User实例,然后将其添加到session中,调用session.commit()方法才会将数据保存到数据库中。最后,建议调用session.close()方法关闭当前连接。

查询数据

查询数据库也是ORM框架的核心功能之一。SQLAlchemy的查询分为简单查询和复杂查询两种。下面是一些简单查询的例子:

查询所有数据

users = session.query(User).all()

其中,session.query(User)是查询对象,all()方法表示查询所有数据。

查询单条数据

user = session.query(User).filter_by(id=1).first()

filter_by()方法用于添加查询条件,first()方法表示只查询一条数据。

查询部分字段

users_name = session.query(User.name).all()

上述代码只查询了User表中的name字段,而忽略了其他字段。

更新数据

更新数据的步骤与插入数据类似,只需修改相应字段即可:

user = session.query(User).filter_by(id=1).first()

user.age = 20

session.commit()

首先使用filter_by方法找到需要更新的行,然后修改对应的字段,最后调用session.commit()方法提交更改。

删除数据

在SQLAlchemy中,删除操作有两种方式,一种是直接调用删除方法,另一种是先查询出需要删除的行,然后调用session.delete()方法删除。

直接调用删除方法

session.query(User).filter_by(id=1).delete()

session.commit()

上述代码中,delete()方法直接删除符合条件的行,然后调用session.commit()方法提交更改。

先查询再删除

user = session.query(User).filter_by(id=1).first()

session.delete(user)

session.commit()

首先通过filter_by()方法查询到需要删除的行,然后调用session.delete()删除行,最后提交更改。

总结

SQLAlchemy是一个强大的Python ORM框架,可以大大简化数据库操作。在使用SQLAlchemy时,首先需要创建一个引擎对象来连接数据库,然后使用ORM API进行表结构、数据的插入、更新和删除等操作,最后的操作记得使用session.commit()方法提交到数据库中。

后端开发标签