one To many

 #!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@author: zengchunyun
"""
from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship, backref
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine Base = declarative_base()
engine = create_engine('mysql+pymysql://root:123@127.0.0.1:3306/day11',echo=True) class Child(Base):
__tablename__ = 'child' # 表名
id = Column(Integer, primary_key=True) # 表字段
parent_id = Column(Integer, ForeignKey('parent.id')) # 外键最好不要直接用类名.字段形式,避免类还没有实例化,最好以表名.字段形式
# 外键关联到另一张表的id字段,通过查找parent_id字段可以找到父亲是谁
parent = relationship('Parent') # 通过查到儿子后,通过儿子.parent.name 可以找到父亲是谁,实例相当于儿子.parent等于Parent类.类直接访问自己的name属性 class Parent(Base):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
name = Column(String(64))
# children = relationship(Child) # 当设置外键时,第一张表如果是先创建,可以使用类名形式关系映射,否则会造成未声明先引用,最好以表名.字段进行关系映射
# 这个是单向映射关联,即一个父亲对应多个儿子,或者多个儿子对应一个父亲 Base.metadata.create_all(engine) DBSession = sessionmaker()
DBSession.configure(bind=engine)
session = DBSession() # 打开数据连接 ret = session.query(Child).filter(Child.id==1).one()
print(ret.parent.name)
ret = session.query(Parent).filter(Parent.id == 1).one()
print(ret.name)

one to many

 class Parent(Base):
__tablename__ = 'parent' # 表名
id = Column(Integer, primary_key=True)
name = Column(String(64))
children = relationship('Child', back_populates='parent') # 第一个参数为类名,当被关联的表先创建时,可以直接写类名,否则只能写字符串形式名字
# 第二个参数为双向one-to-many关系,即反向的many-to-one def __repr__(self):
return "id: {}, name: {}".format(self.id, self.name) class Child(Base):
__tablename__ = 'child'
id = Column(Integer, primary_key=True)
name = Column(String(43))
parent_id = Column(Integer, ForeignKey('parent.id'))
parent = relationship('Parent', back_populates='children') def __repr__(self):
return "id: {}, parent_id: {}, ".format(self.id, self.parent_id) ret = session.query(Parent).filter(Parent.id ==1).all()
print(ret)
print(ret[0].children) # 通过父亲找儿子 ret = session.query(Child).filter(Child.parent_id == Parent.id).all()
print(ret)
print(ret[0].parent.name) # 通过儿子找父亲

one to many,这个效果与上面这个实例一样,这样可以少写一个

 # children = relationship('Child', back_populates='parent') 映射关系
 class Parent(Base):
__tablename__ = 'parent' # 表名
id = Column(Integer, primary_key=True)
name = Column(String(64))
# children = relationship('Child', back_populates='parent') # 第一个参数为类名,当被关联的表先创建时,可以直接写类名,否则只能写字符串形式名字
# 第二个参数为双向one-to-many关系,即反向的many-to-one def __repr__(self):
return "id: {}, name: {}".format(self.id, self.name) class Child(Base):
__tablename__ = 'child'
id = Column(Integer, primary_key=True)
name = Column(String(43))
parent_id = Column(Integer, ForeignKey('parent.id'))
parent = relationship('Parent', backref='children') def __repr__(self):
return "id: {}, parent_id: {}, ".format(self.id, self.parent_id)

one to many, 通过父亲查多个儿子

 class Child(Base):
__tablename__ = 'child' # 表名
id = Column(Integer, primary_key=True) # 表字段
name = Column(String(43))
parent_id = Column(Integer, ForeignKey('parent.id')) # 设置child表的字段parent_id为外键关联到parent表的id class Parent(Base):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
name = Column(String(64))
children = relationship('Child') # 通过关系映射,将children映射到child表,这样可以查到父亲下有几个儿子了, ret = session.query(Parent).filter(Parent.id ==1).one()
print(ret)
print(ret.children)
print(ret.children[0].name)

python之 sqlalchemy的更多相关文章

  1. 基于Python的SQLAlchemy的操作

    安装 在Python使用SQLAlchemy的首要前提是安装相应的模块,当然作为python的优势,可以到python安装目录下的scripts下,同时按住shift+加上鼠标左键,从而在菜单中打开命 ...

  2. SQLAlchemy(1) -- Python的SQLAlchemy和ORM

    Python的SQLAlchemy和ORM(object-relational mapping:对象关系映射) web编程中有一项常规任务就是创建一个有效的后台数据库.以前,程序员是通过写sql语句, ...

  3. python使用sqlalchemy连接pymysql数据库

    python使用sqlalchemy连接mysql数据库 字数833 阅读461 评论0 喜欢1 sqlalchemy是python当中比较出名的orm程序. 什么是orm? orm英文全称objec ...

  4. python之SQLAlchemy

    ORM介绍 orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为 ...

  5. Python’s SQLAlchemy vs Other ORMs[转发 7] 比较结论

    Comparison Between Python ORMs For each Python ORM presented in this article, we are going to list t ...

  6. Python’s SQLAlchemy vs Other ORMs[转发 6]SQLAlchemy

    SQLAlchemy SQLAlchemy is an open source SQL toolkit and ORM for the Python programming language rele ...

  7. Python’s SQLAlchemy vs Other ORMs[转发 3]Django's ORM

    Django's ORM Django is a free and open source web application framework whose ORM is built tightly i ...

  8. Python’s SQLAlchemy vs Other ORMs[转发 2]Storm

    Storm Storm is a Python ORM that maps objects between one or more databases and Python. It allows de ...

  9. Python’s SQLAlchemy vs Other ORMs[转发 0]

    原文地址:http://pythoncentral.io/sqlalchemy-vs-orms/ Overview of Python ORMs As a wonderful language, Py ...

  10. Python’s SQLAlchemy vs Other ORMs[转发 1]SQLObject

    SQLObject SQLObject is a Python ORM that maps objects between a SQL database and Python. It is becom ...

随机推荐

  1. Bootstrap学习笔记

    Bootstrap提供了一套响应式.移动设备优先的流式栅格系统. Bootstrap把一个容器或整个网页平均分成了12列. 栅格系统必须放在.container或container-fluid中 样式 ...

  2. jquery 判断网络资源,网络文件是否存在

    前提是,不能跨域访问引入jquery库<script src="jQuery.js" type="text/javascript"></scr ...

  3. 6Hibernate进阶----青软S2SH(笔记)

    关于关联关系的配置,用注解配置如下(这里引用的jar包是javax.persistence) // @ManyToOne(fetch=FetchType.LAZY) @ManyToOne(fetch= ...

  4. Pandas-数据选取

    Pandas包对数据的常用数据切片功能 目录 [] where 布尔查找 isin query loc iloc ix map与lambda contains DataFrame的索引选取 [] 只能 ...

  5. 一些特殊的URI编码字符

    字符 URL编码值 space %20 " %22 # %23 % %25 & %26 ( %28 ) %29 + %2B , %2C / %2F : %3A ; %3B < ...

  6. 用Canvas写桌球游戏!!!

    声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 昨天上班的时候闲着无事,就用Canvas写了个桌球游戏来玩玩....所以就拿这游戏上来水一发.或许对一些刚学canvas的人有帮助. 话说 ...

  7. JavaScript深入浅出5-数组

    慕课网教程视频地址:Javascript深入浅出 数组:值的有序集合 创建数组:字面量,构造器new array() 数组的读写:push() 尾部加入新元素 unshift() 头部加入新元素 po ...

  8. centos 安装 rabbitMQ

    此类文章一大堆,本文主要站在开发角度保证基本rabbitmq的基本访问. 系统:centos6 64bit 官方指引:https://www.rabbitmq.com/install-rpm.html ...

  9. jquery-常用的运行函数

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 【转】python编码的问题

    摘要: 为了在源代码中支持非ASCII字符,必须在源文件的第一行或者第二行显示地指定编码格式: # coding=utf-8 或者是: #!/usr/bin/python # -*- coding: ...