什么是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()方法提交到数据库中。