理解sqlalchemy与ORM
SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
使用 ORM/Schema Type/SQL Expression Language/Engine/ConnectionPooling/Dialect 所有组件对数据进行操作。根据类创建对象,对象转换成SQL,执行SQL。
1 __author__ = 'lizheng' 2 # !/usr/bin/env python 3 #-*- coding:utf-8 -*- 4 5 6 from sqlalchemy import create_engine 7 from sqlalchemy.ext.declarative import declarative_base 8 from sqlalchemy import Column, Integer, String, ForeignKey, and_, or_ , func 9 from sqlalchemy.orm import sessionmaker, relationship 10 11 Base = declarative_base() # 生成一个sqlORM 基类 12 13 engine = create_engine('mysql+pymysql://root:root@localhost:3306/test?charset=utf8', echo=False) # echo显示执行过程 14 15 class Host(Base): 16 __tablename__ = 'hosts' 17 id = Column(Integer, primary_key=True, autoincrement=True) 18 hostname = Column(String(64), unique=True, nullable=False) 19 ip_addr = Column(String(128), unique=True, nullable=False) 20 port = Column(Integer, default=22) 21 group_id = Column(Integer, ForeignKey('group.id')) 22 #backref为Group关联Host时用的对象名 23 group = relationship('Group', backref='host_list') 24 25 class Group(Base): 26 __tablename__ = 'group' 27 id = Column(Integer, primary_key=True) 28 name = Column(String(64), unique=True, nullable=False) 29 30 Base.metadata.create_all(engine) # 创建所有表结构 31 if __name__ == '__main__': 32 # 创建与数据库的会话session class,注意:这里返回给session的是个class,不是实例 33 SessionCls = sessionmaker(bind=engine) 34 session = SessionCls() # 创建实例 35 h = session.query(Host).filter(Host.hostname=='server').first() # first 结果为class属性 36 print('host group name -->', h.group.name) 37 g = session.query(Group).filter(Group.name=='g2').first() 38 #g.host_list为Host对象 39 for i in g.host_list: 40 print('group 2 hostname -->', g.host_list.hostname) 41 # h1 = Host(hostname='localhost', ip_addr='127.0.0.1') 42 # h2 = Host(hostname='ubuntu', ip_addr='192.168.1.1', port=8888) 43 # h3 = Host(hostname='server2', ip_addr='192.168.2.22', port=1234,group_id = 2) 44 # session.add_all([h3,]) 45 # session.commit() 46 # g1 = Group(name='g1') 47 # g2 = Group(name='g2') 48 # g3 = Group(name='g3') 49 # session.add_all([g1,g2,g3]) 50 # session.commit() 51 # res = session.query(Host).filter(Host.hostname=='server').all() # all 结果为列表 52 # res = session.query(Host).filter(Host.hostname=='server').first() # first 结果为class属性 53 # print('host group name -->', res.group.name) 54 # print('res type-->', type(res)) 55 # g = session.query(Group).filter(Group.name=='g2').first() 56 # print('group 2 hostname -->', g.host_list) 57 # print('group name to hostname -->', g.host_list.hostname) 58 # print('group-->', g) 59 # obj = session.query(Host, func.count()).group_by(Host.group_id).all() 60 # print(obj) 61 # session.commit()
View Code
转载于:https://www.cnblogs.com/lizheng19822003/p/5396116.html
理解sqlalchemy与ORM相关推荐
- SQLAlchemy的ORM
表关系: 表之间的关系存在三种:一对一.一对多.多对多.而SQLAlchemy中的ORM也可以模拟这三种关系.因为一对一其实在SQLAlchemy中底层是通过一对多的方式模拟的,所以先来看下一对多的关 ...
- Flask系列教程(23)——SQLAlchemy的ORM(4)
SQLAlchemy的ORM(4) 如果想深入学习Flask,可以观看这套免费Flask教学视频:零基础:Flask入门到项目实战 表关系: 表之间的关系存在三种:一对一.一对多.多对多.而SQLAl ...
- SQLAlchemy 教程 —— ORM 方式使用示例
先看一个图: 这是 sqlalchemy 的层级图.不难发现,其中 orm 是最顶级的封装. ORM 基本操作步骤如下: 1. 建立连接 from sqlalchemy import create_e ...
- sql python 教程_Python SQLAlchemy ORM教程(3)
由于SQLAlchemy 中文资料比较少,所以根据官网给的tutorial外加其他大佬写的中文资料整合以后准备写一个SQLAlchemy 系列的基础入门教程.本系列可能会夹杂一些个人对于python ...
- 【tips】ORM - SQLAlchemy操作MySQL数据库
优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...
- 灵活使用 SQLAlchemy 中的 ORM 查询
之前做查询一直觉得直接拼 SQL 比较方便,用了 SQLAlchemy 的 ORM 查询之后,发现也还可以,还提高了可读性. 这篇文章主要说说 SQLAlchemy 常用的 ORM 查询方式,偏实践. ...
- [转]SQLAlchemy Introduce
SQLAlchemy Introduce Tao Junjie 2015-12-13 19:17 Source perface 我们每天都要面对数据,数据库CRUD操作的能力对每个任务都至关重要.无论 ...
- 【SQLAlchemy】第一篇——入门
1.背景 许多年以前,在我刚接触数据科学和数据库的时候,经常需要从MySQL中获取数据进行计算.一开始采用的方法是使用pymysql执行SQL语句,然后将返回的结果处理成pandas的DataFram ...
- SQLAlchemy简介与入门
ORM与SQLAlchemy简介 ORM ORM:Object Relation Mapping,最初主要描述的是程序中的Object对象和关系型数据库中Rlation关系(表)之间的映射关系,目前来 ...
最新文章
- Linux设备驱动中的ioctl
- 江苏省计算机一级考试知识点总结,江苏省计算机一级考试注意要点1
- python datetime格式转换_分别用Excel和python进行日期格式转换成时间戳格式
- MS CRM 2011插件调试工具
- oracle数据库集群日志,Oracle集群数据库中恢复归档日志
- ios定位权限plist_iOS-info.plist 中添加定位权限
- XP中CPU占用率100%原因及解决方法
- atoi(s)函数用法
- 用new和delete运算符进行动态分配和撤销存储空间
- __attribute__((unused)):可能不会用到,消除编译警告
- TensorFlow | ReluGrad input is not finite. Tensor had NaN values
- android ajax chrome,chrome浏览器ajax请求状态200,response为空的探索
- ibm doors api java_IBM Rational DOORS通过DXL进行二次开发初试(1)
- 奇奇怪怪的three.js特效(一)
- flutter 报错 type ‘int‘ is not a subtype of type ‘String‘ 奇葩经历
- 【路径规划】第一周: 路径规划 开源代码汇总(ROS) 版本
- 信用卡刷卡消费背后的故事
- 树莓派采集MPU9250运行AHRS进行姿态解算
- 计算机系统结构——量化研究方法(第三版)
- ACPI Spec Chapter 10 Power Source And Power Meter Devices
热门文章
- 计算机组装与维护 授课计划,计算机课程教学计划
- 文件上传linux服务器,Linux 文件上传Linux服务器
- 三菱880彩铅和uni的区别_彩铅测评|150色荷尔拜因彩铅初体验
- jQuery 定位到某个元素
- 【maven】仓库的优先级顺序
- 解决eclipse 中文乱码问题
- java hive 查询语句,使用java连接hive,并执行hive语句详解
- oracle临时表读,Oracle之临时表详细解读
- activty在哪个栈里面_第二篇Activity:2、任务和返回堆栈(Tasks and Back Stack)之基本介绍...
- 平板电脑安装软件_概述嵌入式工业平板电脑的安装方法和注意事项!