1. # -*- coding:utf-8 -*-
  2.  
  3. from sqlalchemy import create_engine, Column, Integer, String, ForeignKey, Index
  4. from sqlalchemy.ext.declarative import declarative_base
  5. from sqlalchemy.orm import relationship, sessionmaker
  6. from django.db import models
  7.  
  8. Base = declarative_base()
  9.  
  10. class Hobby(Base):
  11. __tablename__ = 'hobby'
  12. id = Column(Integer, primary_key = True)
  13. caption = Column(String(50), default = '篮球')
  14.  
  15. class Person(Base):
  16. __tablename__ = 'Person'
  17. nid = Column(Integer, primary_key = True)
  18. name = Column(String(32), index = True, nullable = True)
  19. hobby_id = Column(Integer, ForeignKey("hobby.id"))
  20.  
  21. # hobby属性不管有没有数据库都不会生成这个字段,该字段只作为属性正向和反向关联Hobby
  22. hobby = relationship("Hobby", backref = 'pers')
  23.  
  24. # 创建连接池,pool_size限制连接数10个,max_overflow设置最多多2个连接,也就是最多12个连接。
  25. engine = create_engine("mysql+pymysql://username:password@127.0.0.1:3306/testdb?charset=utf8", max_overflow=2, pool_size=10)
  26. Session = sessionmaker(bind = engine)
  27. # 从连接池中获取连接
  28. session = Session()
  29.  
  30. # 查询一,直接查询表Person的数据
  31. obj1 = session.query(models.Person).all()
  32. for row in obj1:
  33. print(row.name, row.hobby_id)
  34.  
  35. # 查询二,Person和Hobby的关联查询,使用join方式
  36. obj2 = session.query(models.Person.name, models.Hobby.caption).join(models.Hobby, isouter = True).all()
  37. for row in obj2:
  38. print(row[0].name, row[1].caption)
  39.  
  40. # 查询三,Person和Hobby的关联查询,使用relationship方式,正向关联
  41. obj3 = session.query(models.Person).all()
  42. for row in obj3:
  43. print(row.name, row.hobby.caption)
  44.  
  45. # 查询四,查询喜欢篮球的所有人,使用relationship方式,反向向关联
  46. obj4 = session.query(models.Hobby).filter(models.Hobby.id == 2).first()
  47. persons = obj4.pers
  48. for row in persons:
  49. print(row.name)
  50.  
  51. # 关闭数据库连接
  52. session.close()
  53.   
  54. ======================================
  55. #实现根据列表值拿到下标写到数据库
  56. def enums(items):
  57. enums_index = dict(enumerate(items))
  58.  
  59. class Enums(object):
  60. def __init__(self):
  61. for v, i in enums_index.items():
  62. setattr(self, i, v)
  63.  
  64. def __getitem__(self, val):
  65. return enums_index.get(val)
  66.  
  67. def __iter__(self):
  68. return iter(items)
  69.  
  70. return Enums()
  71.  
  72. RefreshStatus = enums([
  73. "pending", "ready", "working", "commited", "successed",
  74. "merged", "aborted", "failed", "exceed",
  75. ])
  76.  
  77. print RefreshStatus.ready
  78. #打印出ready的index为1.

  

python的ORM技巧记录的更多相关文章

  1. 【转载】Python 代码调试技巧

    https://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/ Python 代码调试技巧 张 颖2012 年 5 月 03 日发布 ...

  2. vim 使用技巧记录

    vim 使用技巧记录 1.批量注释与取消注释 命令格式:起始行号,结束行号s#^#//#g 例如: 注释代码3到15行,"//"可以是其他的"" :3,15s# ...

  3. 理解 python metaclass使用技巧与应用场景分析

    理解python metaclass使用技巧与应用场景分析       参考: decorator与metaclass:http://jfine-python-classes.readthedocs. ...

  4. Python MySQL ORM QuickORM hacking

    # coding: utf-8 # # Python MySQL ORM QuickORM hacking # 说明: # 以前仅仅是知道有ORM的存在,但是对ORM这个东西内部工作原理不是很清楚, ...

  5. <转> 30 个有关 Python 的小技巧

    目录[+] 1.1 拆箱 1.2 拆箱变量交换 1.3 扩展拆箱(只兼容python3) 1.4 负数索引 1.5 切割列表 1.6 负数索引切割列表 1.7指定步长切割列表 1.8 负数步长切割列表 ...

  6. python基础===Python 代码优化常见技巧

    Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 8 ...

  7. Python全栈开发记录_第一篇(循环练习及杂碎的知识点)

    Python全栈开发记录只为记录全栈开发学习过程中一些难和重要的知识点,还有问题及课后题目,以供自己和他人共同查看.(该篇代码行数大约:300行) 知识点1:优先级:not>and 短路原则:a ...

  8. Python开发之日志记录模块:logging

    1 引言 最近在开发一个应用软件,为方便调试和后期维护,在代码中添加了日志,用的是Python内置的logging模块,看了许多博主的博文,颇有所得.不得不说,有许多博主大牛总结得确实很好.似乎我再写 ...

  9. Python:文件操作技巧(File operation)(转)

    Python:文件操作技巧(File operation) 读写文件 # ! /usr/bin/python #  -*- coding: utf8 -*- spath = " D:/dow ...

随机推荐

  1. ARTS 1.7 - 1.11

    每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西! Algorithm: 学习算法 题目: https://leetcod ...

  2. 核心思想:互联网创业十问?(大部分创业者是从学习借鉴成功者起步的,不需要把商业模式考虑完备,失败者没资格说趁着年轻...)4种失败的信号 good

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:曹政链接:https://www.zhihu.com/question/20264499/answer/28168079来源: ...

  3. Android CTS Test failed to run to conmpletion 测试超时问题

    引用“Android cts all pass 全攻略”里面的一段话: ❀ testcase timeout 测试某个testcase的时候一直出现 “........”,迟迟没有pass或者fail ...

  4. C# ACCESS 查询提示“至少一个参数没有被指定”问题

    错误的SQL指令如下: sqlStr = “select * from  tb_userInfo where userName=” + userName;    //错误的 sql 指令 正确的SQL ...

  5. CentOS7 firewall与iptables防火墙的使用与开放端口

    如何关闭firewall并开启iptables防火墙 如何使用firewall防火墙 如何关闭firewall并开启iptables防火墙 1.停止firewall systemctl stop fi ...

  6. CentOS7 Vim自动补全插件----YouCompleteMe安装与配置

    最近刚装了新系统CentOS7,想要把编码环境配置一下,使用Vim编写程序少不了使用自动补全插件,我以前用的是neocomplcache+code_complete+omnicppcomplete.但 ...

  7. pycharm窗口选项卡管理

    1.主题 我们已经注意到Pycharm的主编辑框是基于窗口选项卡机制显示的,Pycharm选项卡多种多样,这里我们将详细介绍这种选项卡机制.  2.激活的选项卡 每当我们打开一个Python文件时op ...

  8. 基于python实现的三方组件----Celery

    一.基于python实现的三方组件----Celery 1.作用 用于异步周期任务的处理 2.Celery的组成 (1)任务 app (2)记录任务的缓存(通常用redis或rabbitMQ) 任务记 ...

  9. 【转】JDK 内存参数含义

    Eclipse崩溃,错误提示: MyEclipse has detected that less than 5% of the 64MB of Perm  Gen (Non-heap memory) ...

  10. Android 上传开源项目到 jcenter 实战踩坑之路

    本文微信公众号「AndroidTraveler」首发. 背景 其实 Android 上传开源项目到 jcenter 并不是一件新鲜事,网上也有很多文章. 包括我本人在将开源项目上传到 jcenter ...