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相关推荐

  1. SQLAlchemy的ORM

    表关系: 表之间的关系存在三种:一对一.一对多.多对多.而SQLAlchemy中的ORM也可以模拟这三种关系.因为一对一其实在SQLAlchemy中底层是通过一对多的方式模拟的,所以先来看下一对多的关 ...

  2. Flask系列教程(23)——SQLAlchemy的ORM(4)

    SQLAlchemy的ORM(4) 如果想深入学习Flask,可以观看这套免费Flask教学视频:零基础:Flask入门到项目实战 表关系: 表之间的关系存在三种:一对一.一对多.多对多.而SQLAl ...

  3. SQLAlchemy 教程 —— ORM 方式使用示例

    先看一个图: 这是 sqlalchemy 的层级图.不难发现,其中 orm 是最顶级的封装. ORM 基本操作步骤如下: 1. 建立连接 from sqlalchemy import create_e ...

  4. sql python 教程_Python SQLAlchemy ORM教程(3)

    由于SQLAlchemy 中文资料比较少,所以根据官网给的tutorial外加其他大佬写的中文资料整合以后准备写一个SQLAlchemy 系列的基础入门教程.本系列可能会夹杂一些个人对于python ...

  5. 【tips】ORM - SQLAlchemy操作MySQL数据库

    优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...

  6. 灵活使用 SQLAlchemy 中的 ORM 查询

    之前做查询一直觉得直接拼 SQL 比较方便,用了 SQLAlchemy 的 ORM 查询之后,发现也还可以,还提高了可读性. 这篇文章主要说说 SQLAlchemy 常用的 ORM 查询方式,偏实践. ...

  7. [转]SQLAlchemy Introduce

    SQLAlchemy Introduce Tao Junjie 2015-12-13 19:17 Source perface 我们每天都要面对数据,数据库CRUD操作的能力对每个任务都至关重要.无论 ...

  8. 【SQLAlchemy】第一篇——入门

    1.背景 许多年以前,在我刚接触数据科学和数据库的时候,经常需要从MySQL中获取数据进行计算.一开始采用的方法是使用pymysql执行SQL语句,然后将返回的结果处理成pandas的DataFram ...

  9. SQLAlchemy简介与入门

    ORM与SQLAlchemy简介 ORM ORM:Object Relation Mapping,最初主要描述的是程序中的Object对象和关系型数据库中Rlation关系(表)之间的映射关系,目前来 ...

最新文章

  1. Linux设备驱动中的ioctl
  2. 江苏省计算机一级考试知识点总结,江苏省计算机一级考试注意要点1
  3. python datetime格式转换_分别用Excel和python进行日期格式转换成时间戳格式
  4. MS CRM 2011插件调试工具
  5. oracle数据库集群日志,Oracle集群数据库中恢复归档日志
  6. ios定位权限plist_iOS-info.plist 中添加定位权限
  7. XP中CPU占用率100%原因及解决方法
  8. atoi(s)函数用法
  9. 用new和delete运算符进行动态分配和撤销存储空间
  10. __attribute__((unused)):可能不会用到,消除编译警告
  11. TensorFlow | ReluGrad input is not finite. Tensor had NaN values
  12. android ajax chrome,chrome浏览器ajax请求状态200,response为空的探索
  13. ibm doors api java_IBM Rational DOORS通过DXL进行二次开发初试(1)
  14. 奇奇怪怪的three.js特效(一)
  15. flutter 报错 type ‘int‘ is not a subtype of type ‘String‘ 奇葩经历
  16. 【路径规划】第一周: 路径规划 开源代码汇总(ROS) 版本
  17. 信用卡刷卡消费背后的故事
  18. 树莓派采集MPU9250运行AHRS进行姿态解算
  19. 计算机系统结构——量化研究方法(第三版)
  20. ACPI Spec Chapter 10 Power Source And Power Meter Devices

热门文章

  1. 计算机组装与维护 授课计划,计算机课程教学计划
  2. 文件上传linux服务器,Linux 文件上传Linux服务器
  3. 三菱880彩铅和uni的区别_彩铅测评|150色荷尔拜因彩铅初体验
  4. jQuery 定位到某个元素
  5. 【maven】仓库的优先级顺序
  6. 解决eclipse 中文乱码问题
  7. java hive 查询语句,使用java连接hive,并执行hive语句详解
  8. oracle临时表读,Oracle之临时表详细解读
  9. activty在哪个栈里面_第二篇Activity:2、任务和返回堆栈(Tasks and Back Stack)之基本介绍...
  10. 平板电脑安装软件_概述嵌入式工业平板电脑的安装方法和注意事项!