python的ORM技巧记录
- # -*- coding:utf-8 -*-
- from sqlalchemy import create_engine, Column, Integer, String, ForeignKey, Index
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy.orm import relationship, sessionmaker
- from django.db import models
- Base = declarative_base()
- class Hobby(Base):
- __tablename__ = 'hobby'
- id = Column(Integer, primary_key = True)
- caption = Column(String(50), default = '篮球')
- class Person(Base):
- __tablename__ = 'Person'
- nid = Column(Integer, primary_key = True)
- name = Column(String(32), index = True, nullable = True)
- hobby_id = Column(Integer, ForeignKey("hobby.id"))
- # hobby属性不管有没有数据库都不会生成这个字段,该字段只作为属性正向和反向关联Hobby
- hobby = relationship("Hobby", backref = 'pers')
- # 创建连接池,pool_size限制连接数10个,max_overflow设置最多多2个连接,也就是最多12个连接。
- engine = create_engine("mysql+pymysql://username:password@127.0.0.1:3306/testdb?charset=utf8", max_overflow=2, pool_size=10)
- Session = sessionmaker(bind = engine)
- # 从连接池中获取连接
- session = Session()
- # 查询一,直接查询表Person的数据
- obj1 = session.query(models.Person).all()
- for row in obj1:
- print(row.name, row.hobby_id)
- # 查询二,Person和Hobby的关联查询,使用join方式
- obj2 = session.query(models.Person.name, models.Hobby.caption).join(models.Hobby, isouter = True).all()
- for row in obj2:
- print(row[0].name, row[1].caption)
- # 查询三,Person和Hobby的关联查询,使用relationship方式,正向关联
- obj3 = session.query(models.Person).all()
- for row in obj3:
- print(row.name, row.hobby.caption)
- # 查询四,查询喜欢篮球的所有人,使用relationship方式,反向向关联
- obj4 = session.query(models.Hobby).filter(models.Hobby.id == 2).first()
- persons = obj4.pers
- for row in persons:
- print(row.name)
- # 关闭数据库连接
- session.close()
- ======================================
- #实现根据列表值拿到下标写到数据库
- def enums(items):
- enums_index = dict(enumerate(items))
- class Enums(object):
- def __init__(self):
- for v, i in enums_index.items():
- setattr(self, i, v)
- def __getitem__(self, val):
- return enums_index.get(val)
- def __iter__(self):
- return iter(items)
- return Enums()
- RefreshStatus = enums([
- "pending", "ready", "working", "commited", "successed",
- "merged", "aborted", "failed", "exceed",
- ])
- print RefreshStatus.ready
- #打印出ready的index为1.
python的ORM技巧记录的更多相关文章
- 【转载】Python 代码调试技巧
https://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/ Python 代码调试技巧 张 颖2012 年 5 月 03 日发布 ...
- vim 使用技巧记录
vim 使用技巧记录 1.批量注释与取消注释 命令格式:起始行号,结束行号s#^#//#g 例如: 注释代码3到15行,"//"可以是其他的"" :3,15s# ...
- 理解 python metaclass使用技巧与应用场景分析
理解python metaclass使用技巧与应用场景分析 参考: decorator与metaclass:http://jfine-python-classes.readthedocs. ...
- Python MySQL ORM QuickORM hacking
# coding: utf-8 # # Python MySQL ORM QuickORM hacking # 说明: # 以前仅仅是知道有ORM的存在,但是对ORM这个东西内部工作原理不是很清楚, ...
- <转> 30 个有关 Python 的小技巧
目录[+] 1.1 拆箱 1.2 拆箱变量交换 1.3 扩展拆箱(只兼容python3) 1.4 负数索引 1.5 切割列表 1.6 负数索引切割列表 1.7指定步长切割列表 1.8 负数步长切割列表 ...
- python基础===Python 代码优化常见技巧
Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 8 ...
- Python全栈开发记录_第一篇(循环练习及杂碎的知识点)
Python全栈开发记录只为记录全栈开发学习过程中一些难和重要的知识点,还有问题及课后题目,以供自己和他人共同查看.(该篇代码行数大约:300行) 知识点1:优先级:not>and 短路原则:a ...
- Python开发之日志记录模块:logging
1 引言 最近在开发一个应用软件,为方便调试和后期维护,在代码中添加了日志,用的是Python内置的logging模块,看了许多博主的博文,颇有所得.不得不说,有许多博主大牛总结得确实很好.似乎我再写 ...
- Python:文件操作技巧(File operation)(转)
Python:文件操作技巧(File operation) 读写文件 # ! /usr/bin/python # -*- coding: utf8 -*- spath = " D:/dow ...
随机推荐
- ARTS 1.7 - 1.11
每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西! Algorithm: 学习算法 题目: https://leetcod ...
- 核心思想:互联网创业十问?(大部分创业者是从学习借鉴成功者起步的,不需要把商业模式考虑完备,失败者没资格说趁着年轻...)4种失败的信号 good
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:曹政链接:https://www.zhihu.com/question/20264499/answer/28168079来源: ...
- Android CTS Test failed to run to conmpletion 测试超时问题
引用“Android cts all pass 全攻略”里面的一段话: ❀ testcase timeout 测试某个testcase的时候一直出现 “........”,迟迟没有pass或者fail ...
- C# ACCESS 查询提示“至少一个参数没有被指定”问题
错误的SQL指令如下: sqlStr = “select * from tb_userInfo where userName=” + userName; //错误的 sql 指令 正确的SQL ...
- CentOS7 firewall与iptables防火墙的使用与开放端口
如何关闭firewall并开启iptables防火墙 如何使用firewall防火墙 如何关闭firewall并开启iptables防火墙 1.停止firewall systemctl stop fi ...
- CentOS7 Vim自动补全插件----YouCompleteMe安装与配置
最近刚装了新系统CentOS7,想要把编码环境配置一下,使用Vim编写程序少不了使用自动补全插件,我以前用的是neocomplcache+code_complete+omnicppcomplete.但 ...
- pycharm窗口选项卡管理
1.主题 我们已经注意到Pycharm的主编辑框是基于窗口选项卡机制显示的,Pycharm选项卡多种多样,这里我们将详细介绍这种选项卡机制. 2.激活的选项卡 每当我们打开一个Python文件时op ...
- 基于python实现的三方组件----Celery
一.基于python实现的三方组件----Celery 1.作用 用于异步周期任务的处理 2.Celery的组成 (1)任务 app (2)记录任务的缓存(通常用redis或rabbitMQ) 任务记 ...
- 【转】JDK 内存参数含义
Eclipse崩溃,错误提示: MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) ...
- Android 上传开源项目到 jcenter 实战踩坑之路
本文微信公众号「AndroidTraveler」首发. 背景 其实 Android 上传开源项目到 jcenter 并不是一件新鲜事,网上也有很多文章. 包括我本人在将开源项目上传到 jcenter ...