声明:工作原因涉及一点
- What is ORM
答: object relation mapping 一种实现对象与数据库中的关系表映射的中间件。ORM 框架中最有名的是SQLALCHEMY
- 具体使用ORM的流程
Python定义class----class与数据库表产生映射---操作class使得数据库中的表发生变化
关键的步骤:
- 确认数据库是否打开
- Sqlalchemy是否安装以及导入
- 对数据库进行的增删改查
增加数据库中的表:
具体的步骤:
- 创建一个类,类名就是python中类名,类名中声明的表名才是数据库中会生成的表的名称(通常两者是对应的,不然在操作的时候回很容易混乱)
具体的代码:
Class Company( ):
__tablename__ = “company”
Id = Column(Interger,primary_key = True,autoincrement=True)
Name = Column(string(32),index=True)
完成python中数据类的创建,但是这样不会在数据库中生成一个Company的数据表
因为继承基类的才可以在数据库中创建
故:
声明一个ORM模型的一个基类
From sqlalchemy.ext.declarative import declareative_base ----导入官宣的base
Base = declarative_base()-------实例化一个基类
(备注: ORM模型object的属性=table中创建的字段
object 定义数据表中的操作和属性
ORM模型中的基类是有base定义的,只要继承了base基类,就省去了自己定义的过程)
From sqlalchemy import Interger,String,Column
Class Company(Base ):
__tablename__ = “company”
Id = Column(Interger,primary_key = True,autoincrement=True)
Name = Column(string(32),index=True)
(备注; base中定义只有被column声明名称,ORM才会将其变成表中的字段)
- 数据引擎----链接数据引擎
From sqlalchemy import create_engine
Engine = create_engine(“ 被识别的url ”)
- 将继承base的class(自己创建数据库中还没有的表)序列换成数据表
Base.metadate.creat_all( engine ) ------将所有继承base的“元数据”/class 创建(creat_all)在(engine)这个数据库引擎中
- 在数据引擎中创建了各种表之后就是对表进行的增删改查(crud)操作
类似于在mysql以及orecl等其他数据库一样,若是对数据库表的操作通常步骤
- 登录数据库-------导入数据库引擎
- 创建sql window----创建查询命令的会话窗口 sessionmaker
- 写SQL代码 -------对class进行相应的操作
- 选中sql命令点击执行-----提交会话窗口中的命令
对应的具体的sqlalchemy的代码以及操作
1)登录数据库----登录数据库-------导入数据库引擎
From sqlalchemy import creat_engine
Engine=create_engine('oracle://xn_china_wind:xn_chinawind34@172.16.2.34/orcl')
- 创建sql window----创建查询命令的会话窗口 sessionmaker
From sqlalchemy.orm import sessionmake()
Session = sessionmaker(engine)-----在数据库引擎中创建会话窗口
Session_win = Session( )---------------打开session会话窗口
- 写SQL代码 -------对class进行相应的操作
一、
对创建的User类进行操作
user_obj = User(name =”DragonFire”) ------创建sql语句
Session_win.add(user_obj)-------加载SQL语句在会话窗口
二、
创建对象列表
User_obj_list = [User(name =”DragonFire”) , User(name =”Dragon”)]
Session_win.add_all(User_obj_list)-------加载SQL语句在会话窗口
- 点击运行的操作
一、
Session_win.commit() -------提交指令
Session_win.close()-----------------关闭会话窗口
二、
Session_win.commit() -------提交指令
Session_win.close()-----------------关闭会话窗口