其实一开始用的是pymysql,但是发现维护比较麻烦,还存在代码注入的风险,所以就干脆直接用ORM框架。
ORM即Object Relational Mapper,可以简单理解为数据库表和Python类之间的映射,通过操作Python类,可以间接操作数据库。
Python的ORM框架比较出名的是SQLAlchemy和Peewee,这里不做比较,只是单纯讲解个人对SQLAlchemy的一些使用,希望能给各位朋友带来帮助。
- sqlalchemy版本: 1.3.15
- pymysql版本: 0.9.3
- mysql版本: 5.7
初始化工作
一般使用ORM框架,都会有一些初始化工作,比如数据库连接,定义基础映射等。
以MySQL为例,创建数据库连接只需要传入DSN字符串即可。其中echo表示是否输出对应的sql语句,对调试比较有帮助。
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://$user:$password@$host:$port/$db?charset=utf8mb4', echo=True)
个人设计
对于我个人而言,引进ORM框架时,我的项目会参考MVC模式做以下设计。其中model存储的是一些数据库模型,即数据库表映射的Python类;model_op存储的是每个模型对应的操作,即增删查改;调用方(如main.py)执行数据库操作时,只需要调用model_op层,并不用关心model层,从而实现解耦。
├── main.py
├── model
│ ├── __init__.py
│ ├── base_model.py
│ ├── ddl.sql
│ └── py_orm_model.py
└── model_op
├── __init__.py
└── py_orm_model_op.py
映射声明(Model介绍)
举个栗子,如果我们有这样一张测试表
create table py_orm (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '唯一id',
`