SQLAlchemy 是一个基于 python 实现的 ORM 框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简而言之就是: 将类和对象转换成SQL,然后使用数据API进行SQL并获取执行结果.
pip install sqlalchemy -i http://pypi.douban.com/simple --trusted-host pypi.douban.com # 下载SQLAlchemy 模块
组成部分:
SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:
MySQL-Python mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname> pymysql mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>] MySQL-Connector mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname> cx_Oracle oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...] 更多:http://docs.sqlalchemy.org/en/latest/dialects/index.html
1 . 创建数据表
注意 : 要先创建对应的数据库,我的数据库叫 s1
# ORM中的数据表是什么呢? # Object Relation Mapping # Object - Table 通过 Object 去操纵数据表 # 从而引出了我们的第一步创建数据表 - 创建Object # 1. 创建Object # class User(object): # pass # 通过SQLAlchemy创建数据表 # 1.导入SQLAlchemy from sqlalchemy.ext.declarative import declarative_base # 2.创建ORM模型基类,要被继承 Base = declarative_base() # 3.导入ORM对应数据库类型的字段,比如:列,整型,字符串 from sqlalchemy import Column, Integer, String # 4.创建ORM对象 # 当前的这个Object继承了Base也就是代表了Object继承了ORM的模型 class User(Base): # 相当于 Django Models中的 Model # 创建表名,__双下划线 __tablename__ = "user" # 设置为主键,并且自增(默认) # id = Column(数据类型,索引,主键,外键,等等) id = Column(Integer, primary_key=True, autoincrement=True) # 设置索引 name = Column(String(32), index=True) # 5.创建数据库连接 from sqlalchemy import create_engine # 数据库创建连接完成 # 连接时 用mysql 和 python 的pymsql enginne = create_engine("mysql+pymysql://root:@127.0.0.1:3306/s1?charset=utf8") # 6.去数据库中创建于User所对应的数据表 # 去User数据库中创建所有基层Base类的 ORM对象 # Base 自动检索所有继承Base的ORM 对象 并且创建所有的数据表 Base.metadata.create_all(enginne)
2 . 增删改查操作
2.1 增加数据
# 创建会话 -- 打开数据库连接 from create_table import enginne from sqlalchemy.orm import sessionmaker # 创建会话窗口 # 创建 sessionmaker 会话对象,将数据库引擎 engine 交给 sessionmaker Session = sessionmaker(enginne) # 打开会话窗口 db_session = Session() # 1.增加数据 == insert # 原生mysql语句 , insert into user(name) values("yirenye") from create_table import User user_obj = User(name="异人夜") # 通过de_session已经打开的会话窗口,提交数据 db_session.add(user_obj) # 相当于 insert into # 执行会话窗口中的所有操作 db_session.commit() # 关闭窗口 db_session.close() # 2.增加批量数据 -- 多条 from create_table import User db_session.add_all([ User(name="小慯"), User(name="Tom"), User(name="Ealse"), ]) db_session.commit() db_session.close() # 扩展 from create_table import User User1 = User(name="666") User2 = User(name="888") User3 = User(name="999") db_session.add(User1) db_session.add(User2) db_session.add(User3) db_session.commit() db_session.close()
2.2 查询书籍
# 会话窗口 from sqlalchemy.orm import sessionmaker from create_table import enginne Session = sessionmaker(enginne) db_session = Session() from create_table import User # 1.简单查询 # 原生sql语句 select * from table # 查询全部 user_list = db_session.query(User).all() for row in user_list: print(row.id, row.name) """ 5 666 6 888 7 999 4 Ealse 3 Tom 2 小慯 1 异人夜 """ # 查询一条 user = db_session.query(User).first() print(user.id, user.name) # 5 666 # 2.带条件查询 user_list = db_session.query(User).filter(User.id == 4).all() print(user_list[0].id, user_list[0].name) # 4 Ealse user = db_session.query(User).filter_by(id=3).first() print(user.id, user.name) # 3 Tom user_list = db_session.query(User).filter(User.id >= 4).all() for row in user_list: print(row.id, row.name) """ 4 Ealse 5 666 6 888 7 999 """ # 扩展,查看sql语句 sql = db_session.query(User).filter(User.id >= 5) print(sql) """ SELECT user.id AS user_id, user.name AS user_name FROM user WHERE user.id >= %(id_1)s """ # 关闭会话 db_session.close()
2.3 修改数据
# 更新修改数据 from sqlalchemy.orm import sessionmaker from create_table import enginne, User Session = sessionmaker(enginne) db_session = Session() # 修改数据 -- 先查询数据在进行修改 # 原生sql语句的修改(将id=1的数据的 name 修改成666) : update "user" set "name" = "666" where id = 1 res = db_session.query(User).filter(User.name=="Ealse").update({"name":"杰斯"}) print(res) # 1 -- 符合条件的只有一条 db_session.commit() db_session.close() res = db_session.query(User).filter(User.id >= 5).update({"name":666666}) print(res) # 3 -- 符合条件的有3条 db_session.commit() db_session.close()
2.4 删除数据
原文:https://www.cnblogs.com/zmc940317/p/10376008.html