SQLAlchemy采用简单的Python语言,提供高效和高性能的数据库访问,实现了完整的企业级持久模型。
它提供了SQL工具包和ORM(对象关系映射)工具,类似于Django 自带的 ORM 框架操作数据库。
基于python3.8环境,安装 sqlalchemy 和 pymysql
pip3 install sqlalchemy==1.4.39 pip3 install pymysql==1.0.2
连接数据库,需要使用到一些配置信息,组合成满足以下条件的字符串:
dialect+driver://username:password@host:port/database
相关配置参数说明
配置参数 | 说明 |
---|---|
dialect | 数据库,如:sqlite、mysql、oracle等 |
driver | 数据库驱动,如前面安装的:pymysql |
username | 登录数据库用户名 |
password | 登录数据库密码 |
host | 数据库部署 IP 地址 |
port | 端口 |
database | 数据库库名 |
拼接地址示例
# 拼接配置dialect + driver://username:passwor@host:port/database DB_URI = 'mysql+pymysql://root:123456@localhost:3306/web'
查询 SQL 示例
select * from yoyo_projectinfo WHERE project_name = 'yoyo';
执行结果
先测试下配置的参数是否能连上数据库,写个简单的sql查询
from sqlalchemy import create_engine # 拼接配置dialect + driver://username:passwor@host:port/database DB_URI = 'mysql+pymysql://root:123456@localhost:3306/web' engine = create_engine(DB_URI) # 创建引擎 conn = engine.connect() # 创建连接 result = conn.execute('select * from yoyo_projectinfo WHERE project_name = "yoyo";') # 执行SQL print(result.fetchone()) conn.close() # 关闭连接
能看到执行结果,说明数据库连接成功。这是执行的硬核SQL语句,接下来就是讲通过ORM 操作数据库。
SQLAlchemy 是 Python 著名的 ORM 工具包。通过 ORM,开发者可以用面向对象的方式来操作数据库,不再需要编写 SQL 语句。
在python代码中创建一个类,每个类对应了一个数据库中的一张表,类的数据属性对应了表中的字段名,这个类称为映射类。
创建模型示例
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import create_engine, Column, Integer, String # 拼接配置dialect + driver://username:passwor@host:port/database DB_URI = 'mysql+pymysql://root:123456@localhost:3306/web' Base = declarative_base() class Students(Base): __tablename__ = 'students' # 数据库表名 id = Column(Integer, primary_key=True) name = Column(String(20)) fullname = Column(String(30)) nickname = Column(String(30)) def __repr__(self): return "<User(name='%s', fullname='%s', nickname='%s')>" % ( self.name, self.fullname, self.nickname)
相关参数说明:
__tablename__
:数据库表名
Column: 数据表中的一列,内部定义了数据类型
primary_key:主键
String:定义字段是字符串类型,字符串类型需定义字符长度
执行下面这2句,将模型映射到数据库中
if __name__ == '__main__': engine = create_engine(DB_URI) Base.metadata.create_all(engine) # 将模型映射到数据库中
执行完成后,在数据库中就可以看到students 表了
模型创建完成后,接下来需要往数据库表里面添加数据,需要使用一个引擎的实例来创建一个 Session类的实例。
from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from xx.xx import Students engine = create_engine('mysql+pymysql://root:123456@localhost:3306/web') # 把当前的引擎绑定给这个会话 Session = sessionmaker(bind=engine) # 实例化 session = Session() # 创建一个student对象 student_obj = Students(name='yoyo', fullname='yoyoketang', nickname='yy') session.add(student_obj) # 添加到session session.commit() # 提交到数据库
执行完成后,会看到数据库里面有新增的数据了
批量创建数据使用add_all
session.add_all([ Students(name='yoyo1', fullname='yoyoketang1', nickname='yy1'), Students(name='yoyo2', fullname='yoyoketang2', nickname='yy2') ]) session.commit()