一. 介绍
SQLAlchemy是Python中最有名的ORM工具。
关于ORM:
全称Object Relational Mapping(对象关系映射)。
特点是操纵Python对象而不是SQL查询,也就是在代码层面考虑的是对象,而不是SQL,体现的是一种程序化思维,这样使得Python程序更加简洁易读。
具体的实现方式是将数据库表转换为Python类,其中数据列作为属性,数据库操作作为方法。
优点:
简洁易读:将数据表抽象为对象(数据模型),更直观易读
可移植:封装了多种数据库引擎,面对多个数据库,操作基本一致,代码易维护
更安全:有效避免SQL注入
1.安装
pip install SQLalchemy
2. 创建连接
from sqlalchemy import create_engine
engine = create_engine(" mysql://user:password@hostname/dbname?charset=uft8")
注:mysql+pymysql或者mysql+mysqlconnector 或者 mysql+mysqldb
3. 创建数据库表类(模型)
我们操作表的时候就需要通过操作对象来实现,现在我们来创建一个类。
# Column 定义字段,Integer、String 分别为整数和字符串数据类型 from sqlalchemy import Column, Integer, Stringclass User(Base): # 继承声明基类 __tablename__ = 'user' # 设置数据表名字,不可省略 id = Column(Integer, primary_key=True) # 设置该字段为主键 # unique 设置唯一约束,nullable 设置非空约束 name = Column(String(64), unique=True, nullable=False) email = Column(String(64), unique=True) # 此特殊方法定义实例的打印样式 def __init__(self, name, email): self.name = name self.email = email def __repr__(self): return '<User: {}>'.format(self.name)
数据库表模型类通过__tablename__和表关联起来,Column表示数据表的列。
4. 生成数据库表
Base.metadata.create_all(engine)
创建表,如果存在则忽略,执行以上代码,就会发现在db中创建了users表。
操作数据
表创建好了就是操作数据了,常见的操作增删改查。
sqlalchemy中使用session用于创建程序和数据库之间的会话,所有对象的载入和保存都需要通过session对象。
通过sessionmaker调用创建一个工厂,并关联Engine以确保每个session都可以使用该Engine连接资源。
session的常见操作方法包括:
flush:预提交,提交到数据库文件,还未写入数据库文件中
commit:提交了一个事务
rollback:回滚
close:关闭
常见数据库操作CRUD
增加: session.add()将会把Model加入当前session维护的持久空间(可以从session.dirty看到)中,直到commit时提交到数据库。
查询:通常我们通过以上查询模式获取数据,需要注意的是,通过session.query()我们查询返回了一个Query对象,此时还没有去具体的数据库中查询,只有当执行具体的.all(),.first()等函数时才会真的去操作数据库。
修改: 更新数据有两种方法,一种是使用query中的update方法,另一种是操作对应的表模型
删除: 和更新数据类似,删除数据也有两种方法
参考: https://www.liaoxuefeng.com/wiki/897692888725344/955081460091040
https://www.jb51.net/article/173950.htm