ORM与SQLAlchemy简介
ORM
ORM:Object Relation Mapping,最初主要描述的是程序中的Object对象和关系型数据库中Rlation关系(表)之间的映射关系,目前来说也是描述程序中对象和数据库中数据记录之间的映射关系的统称,是一种进行程序和数据库之间数据持久化的一种编程思想。
常见的ORM操作流程和步骤
常规情况下,软件程序中的ORM操作主要有四个操作场景:增、删、改、查
核心操作一般会区分为:增删改、查询
增删改操作
增加操作:程序中存在的一个对象Object数据,通过[ORM]核心模块进行增加的函数定义将对象保存到数据库的操作过程;如~注册操作中,通过用户输入的账号密码等信息创建了一个独立的对象,通过add()函数将对象增加保存到数据库中,数据库中就存在用户这个对象数据了。
修改操作:程序中存在的一个对象Object数据,有自己的id编号(可以是程序中自行赋值定义、更多的操作是从数据库中查询出来存在的一个对象),通过[ORM]核心模块进行修改函数的定义将对象改变的数据更新到数据库中已经存在的记录中的过程;如~用户更改登录密码操作时,根据程序中查询得到的一个用户[id编号、账号、密码、..],在程序中通过改变其密码属性数据,然后通过update()函数将改变的数据更新保存到数据库中,数据库中原来的数据就发生了新的改变。
删除操作:程序中存在的一个对象或者已知的id编号,通过主键编号或者对象的任意属性进行数据库中数据记录的删除的操作过程;如~管理员删除某个会员账号的操作,通过获取要删除会员的账号,然后通过delete()函数将要删除的会员信息告知数据库执行删除操作,数据库中的某条存在的数据记录就被删除掉了。
SQLAlchemy
SQLAlchemy 是Python 社区最知名的 ORM 工具之一,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。
SQLAlchemy底层对数据库表以及表关系的定义,数据库的操作做了封装,使得开发人员可以用python代码来和数据库交互,比起传统的sql语句来说要方便许多。
SQLAlchemy官网: https://www.sqlalchemy.org/
架构图
安装SQLAlchemy
pip install SQLAlchemy
查看版本
import sqlalchemy sqlalchemy.__version__
创建连接
from sqlalchemy import create_engine engine = create_engine("sqlite:///:memory:", echo=True)
‘sqlite:///:memory:’ 是 database URL
SQLite
sqlite是基于文件的数据库
# database URL 形式是 sqlite://<nohostname>/<path> engine = create_engine('sqlite:///foo.db') # 在Unix/Mac engine = create_engine('sqlite:absolute/path/to/foo.db') # 在Windows engine = create_engine('sqlite:///C:\\path\\to\\foo.db') # 在Windows 中使用原始字符串 engine = create_engine(r'sqlite:///C:\path\to\foo.db') # 使用内存 engine = create_engine('sqlite://') engine = create_engine('sqlite:///:memory:')
MySQL
默认使用mysql-python
# 默认情况(即使用mysql-python) engine = create_engine('mysql://scott:tiger@localhost/foo') # 使用mysql-python engine = create_engine('mysql+mysqldb://scott:tiger@localhost/foo') # 使用MySQL-connector-python engine = create_engine('mysql+mysqlconnector://scott:tiger@localhost/foo') # 使用OurSQL engine = create_engine('mysql+oursql://scott:tiger@localhost/foo')
PostgreSQL
PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS)。
sqlalchemy 默认使用 psycopg2
# 默认情况(即使用psycopg2) engine = create_engine('postgresql://scott:tiger@localhost/mydatabase') # 使用psycopg2 engine = create_engine('postgresql+psycopg2://scott:tiger@localhost/mydatabase') # 使用pg8000 engine = create_engine('postgresql+pg8000://scott:tiger@localhost/mydatabase')