# -*- 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技巧记录的更多相关文章

  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. qml实现对SSL的支持(使用msys2,同时支持32和64位)超详细 good

    首先准备环境.两种方法,使用mingw64 或者VS 直接放上下载地址https://sourceforge.net/projects/msys2/我下载的是msys2-x86_64-20161025 ...

  2. Android零基础入门第21节:ToggleButton和Switch使用大全

    原文:Android零基础入门第21节:ToggleButton和Switch使用大全 上期学习了CheckBox和RadioButton,那么本期来学习Button的另外两个子控件ToggleBut ...

  3. ArrayList(1.8)

    public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess ...

  4. Delphi中用MessageBox()API函数做倒计时对话框(使用Hook安装CBTHookCallback,计时器更改文字,SetWindowText API真正修改文字,引用未知函数)good

    API有隐藏的MessageBoxTimeOut函数可以做计时对话框,缺点是不能显示还剩下多少秒关闭. const IDTIMEDOUT = 32000; function MessageBoxTim ...

  5. python的内存分配

    一.前言 大多数编译型语言,变量在使用前必须先声明,其中C语言更加苛刻:变量声明必须位于代码块最开始,且在任何其他语句之前.其他语言,想C++和java,允许“随时随地”声明变量,比如,变量声明可以在 ...

  6. python爬虫之PyQuery

    # -*- coding: UTF-8 -*- from pyquery import PyQuery as pq import re from datetime import datetime,ti ...

  7. python trojan development 2nd —— use python to send mail and listen to the key board then combine them

    请勿用于非法用途!!!!!本人概不负责!!!原创作品,转载说明出处!!!!! from pynput.keyboard import Key,Listener import logging impor ...

  8. 浅析为何使用融合CDN是大趋势?

    使用传统CDN的用户遇到的新问题 随着云计算时代的快速发展,尤其是流媒体大视频时代的到来,用户在是使用过往CDN节点资源调配将面临很多问题: 问题1: 流媒体时代不局限于静态内容分发,直播点播等视频服 ...

  9. 关于Jvm类加载机制,这一篇就够了

    前言 一个月没更新了,这个月发生了太多的事情,导致更新的频率大大降低,不管怎样收拾心情,技术的研究不能落下! jvm作为每个java程序猿必须了解的知识,博主推荐一本书<深入理解Java虚拟机& ...

  10. java 字符串内存分配的分析与总结

    经常在网上各大版块都能看到对于java字符串运行时内存分配的探讨,形如:String a = "123",String b = new String("123" ...