1. 什么是SQLAlchemy框架
SQLAlchemy是一个流行的Python ORM框架,它为Python开发者提供一种方便的方式来连接和操作数据库,同时它还提供了一个底层SQL表达式构建器和一个类似于ActiveRecord的操作对象管理器。
ORM即对象关系映射,它可以让开发者以面向对象的方式来构建和操作数据库,而不需要写大量的SQL语句。
2. SQLAlchemy的安装
要使用SQLAlchemy,我们需要先安装它。可以使用pip包管理器在控制台中输入以下命令进行安装。
pip install sqlalchemy
在安装完成后,就可以在Python脚本中使用SQLAlchemy了。
3. 连接到数据库
3.1 配置数据库引擎
首先,我们需要在Python中指定使用哪种数据库引擎来连接数据库。SQLAlchemy支持各种不同的数据库引擎,例如MySQL、PostgreSQL和SQLite。
在本例中,我们将使用SQLite吧!
要使用SQLite数据库,我们需要启动一个SQLite数据库引擎。可以在Python中使用如下代码来配置数据库引擎:
from sqlalchemy import create_engine
engine = create_engine('sqlite:///example.db', echo=True)
上面代码中,我们使用了SQLAlchemy提供的create_engine()函数,来创建一个SQLite数据库引擎。engine是一个由create_engine()函数返回的实例对象。
echo属性是一个布尔值,通常用于开启引擎的调试模式,当它被设置为True时,会在控制台输出引擎日志信息。
3.2 创建连接
在连接到SQLite数据库之前,我们需要先创建一个连接。创建连接的方式也非常简单:
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
上面的代码,我们定义了一个session变量,使其等于创建的sessionmaker实例对象的调用结果。
4. ORM映射
ORM映射的主要目的是将数据库中的表和Python中的类映射起来。一般情况下,表中的每一行都对应着Python中的一个对象,而Python对象的属性则对应着表的列。
4.1 创建类
在SQLAlchemy中,创建映射类一般都是通过继承Base类来实现的:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Float
Base = declarative_base()
class Book(Base):
__tablename__ = 'books'
id = Column(Integer, primary_key=True)
title = Column(String)
author = Column(String)
price = Column(Float, default=0.0)
description = Column(String)
上述代码定义了一个Book类,它继承了Base类,表示它是一个ORM映射类。__tablename__属性指定了类对应的表名。类中的每个属性(Column)都表示表中的一个列。
primary_key表示该列为主键,如果想要设置该表的外键可以参考SQLAlchemy文档
5. 增删改查
接下来,我们就可以通过SQLAlchemy方式来对数据库进行增删改查操作了。
5.1 新增
使用ORM框架的最大好处之一就是可以将数据对象实例化到内存中,然后通过ORM框架的Session操作对象进行管理,最后提交到数据库中。
book = Book(title='Python Web开发实战', author='Jack', price=32.8, description='Python Web开发教程')
session.add(book)
session.commit()
上面的代码完成了一个图书对象的新增操作,首先使用Book对象创建一个新的实例,然后通过session.add()方法添加到当前会话会话之中,在最后使用session.commit()将Book对象持久化到数据库中。
5.2 修改
要修改一个对象,我们需要先查询到这个对象,再将其某个属性进行修改,例如:
book = session.query(Book).filter_by(title='Python Web开发实战').first()
book.price = 29.0
session.commit()
这里首先使用session.query()方法查询数据,查询完成之后通过修改price属性的值来修改图书价格,最后使用session.commit()将修改的数据更新到数据库中。
5.3 删除
要删除一个对象,我们也需要先查询到这个对象,然后将其从session中移除,最后通过session.commit()完成持久化的操作。
book = session.query(Book).filter_by(title='Python Web开发实战').first()
session.delete(book)
session.commit()
上述代码中,我们首先使用session.query()方法查询到一个Book对象,然后使用session.delete()方法将其从session中移除,最后使用session.commit()将修改的内容持久化到数据库中。