SQLAlchemy 简介:
SQLAlchemy 是用于实现 ORM(Object Relational Mapping,对象关系映射)的一个模块,即把数据库的表结构映射到对象上
在 Python 中,也就是将关系型数据库表结构抽象成面向对象的 Python 类,将表操作转换成类操作,避免了复杂的 SQL 语句编写
[root@localhost ~]# pip3 install SQLAlchemy
SQLAlchemy 连接数据库:
#!/usr/bin/env python3 #-*- coding: utf-8 -*- from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://root:123456@127.0.0.1/test', encoding='utf8', echo=True) print(engine) # create_engine():用于创建一个Engine实例,通过这个实例,SQL语句会被解释成Python类方法 # 语法:mysql+pymysql://<user>:<password>@<host>[:<port>]/<dbname> # mysql:表示使用哪种数据库,其他数据库如 Oracle 、Redis 、MongoDB 等 # pymysql:SQLAlchemy本身无法操作数据库,必须使用第三方模块进行操作 python2 使用 mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname> 来操作数据库 python3 使用 mysql+pymysql://<user>:<password>@<host>[:<port>]/<dbname> 来操作数据库 # <user>:<password>@<host>[:<port>]/<dbname>:分别表示连接数据库的用户名 、密码 、主机以及连接到哪个库名 # encoding='utf8':用于指定字符编码,可选参数 # echo=True:会显示Python类对应的SQL语句,方便查看要执行什么SQL语句,可选参数
SQLAlchemy 创建表结构:
第一种方式:在自定义的类中继承 declarative_base 这个基类来映射数据表
#!/usr/bin/env python3 #-*- coding: utf-8 -*- from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, String, Integer engine = create_engine('mysql+pymysql://root:123456@127.0.0.1/test') # 连接数据库 Base = declarative_base() # 生成 ORM 基类 class User(Base): # 继承基类 __tablename__ = "user" # 定义表名 userid = Column(Integer, primary_key=True) # 定义 userid 字段,字段类型为数值类型,并设为主键 username = Column(String(32)) # 定义 username 字段,字段类型为字符串类型 password = Column(String(64)) # 定义 password 字段,字段类型为字符串类型 if __name__ == '__main__': Base.metadata.create_all(engine) # 创建表结构,父类Base会调用所有继承他的子类来创建表结构
第二种方式:通过 MetaData 来存储表的元数据(也就是存储表结构),然后映射数据表
#!/usr/bin/env python3 #-*- coding: utf-8 -*- from sqlalchemy import create_engine, MetaData from sqlalchemy import Table, Column, Integer, String engine = create_engine('mysql+pymysql://root:123456@127.0.0.1/test') # 连接数据库 metadata = MetaData() # 存储表的元数据 user = Table('user', metadata, # 定义表名 Column('userid', Integer, primary_key=True), # 定义 userid 字段,字段类型为数值类型,并设为主键 Column('username', String(32)), # 定义 username 字段,字段类型为字符串类型 Column('password', String(64)), # 定义 password 字段,字段类型为字符串类型 ) if __name__ == '__main__': metadata.create_all(engine) # 创建表结构
SQLAlchemy 增加表数据:
Python 对 MySQL 数据库进行增删查改等操作需要先创建 session,session 用于创建程序与数据库之间的会话,所有对象的载入和保存都需要通过 session 对象
#!/usr/bin/env python3 #-*- coding: utf-8 -*- from sqlalchemy import create_engine from sqlalchemy import Column, String, Integer from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker engine = create_engine('mysql+pymysql://root:123456@127.0.0.1/test') Base = declarative_base() DBSession = sessionmaker(bind=engine) # 创建与数据库的会话 session = DBSession() # 实例化与数据库的会话 class User(Base): __tablename__ = "user" userid = Column(Integer, primary_key=True) username = Column(String(32)) password = Column(String(64)) user1 = User(userid=1, username='Tom', password='123456') # 生成user表要插入的一条数据 user2 = User(userid=2, username='John', password='123456') # 生成user表要插入的一条数据 user3 = User(userid=3, username='Jeny', password='123456') # 生成user表要插入的一条数据 session.add(user1) # add()用于把user表要插入的一条数据添加到Session里 session.add_all([user2, user3]) # add_all()用于把user表要插入的多条数据添加到Session里 session.commit() # 最后提交会话,实现插入数据 session.close()
SQLAlchemy 查询表数据: