python之 sqlalchemy
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的更多相关文章
- 基于Python的SQLAlchemy的操作
安装 在Python使用SQLAlchemy的首要前提是安装相应的模块,当然作为python的优势,可以到python安装目录下的scripts下,同时按住shift+加上鼠标左键,从而在菜单中打开命 ...
- SQLAlchemy(1) -- Python的SQLAlchemy和ORM
Python的SQLAlchemy和ORM(object-relational mapping:对象关系映射) web编程中有一项常规任务就是创建一个有效的后台数据库.以前,程序员是通过写sql语句, ...
- python使用sqlalchemy连接pymysql数据库
python使用sqlalchemy连接mysql数据库 字数833 阅读461 评论0 喜欢1 sqlalchemy是python当中比较出名的orm程序. 什么是orm? orm英文全称objec ...
- python之SQLAlchemy
ORM介绍 orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为 ...
- 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 ...
- Python’s SQLAlchemy vs Other ORMs[转发 6]SQLAlchemy
SQLAlchemy SQLAlchemy is an open source SQL toolkit and ORM for the Python programming language rele ...
- 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 ...
- 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 ...
- Python’s SQLAlchemy vs Other ORMs[转发 0]
原文地址:http://pythoncentral.io/sqlalchemy-vs-orms/ Overview of Python ORMs As a wonderful language, Py ...
- 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 ...
随机推荐
- ExtJs 实现表单联动
最近做的项目使用Extjs.遇到表单联动的业务.下面来说说主要实现思想: 说明:表单联动一般存在从属关系,有大范围的对象和大范围中的小对象.比如地理位置的选定(例:浙江省-杭州市-某某县).在这里,我 ...
- 使用bootstrap tooltip控件动态修改提示内容
初始化控件之后即使修改了元素的title内容也不会更改提示信息,比如下面 $(element).attr('title','XXXXXX') 这样只会增加一个原生的title提示,如果保持原样显示必须 ...
- [BZOJ1146][CTSC2008]网络管理Network
[BZOJ1146][CTSC2008]网络管理Network 试题描述 M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建 ...
- highcharts的引用
开放 CDN 服务 1.基础的使用(CDN) <script src="http://cdn.hcharts.cn/jquery/jquery-1.8.3.min.js"&g ...
- 用 nssm 把 Nginx 安装成 Windows 服务方法
总之:用 nssm 比 srvany.exe 简便多了.1. 下载nginx windows版本:http://nginx.org/ 2. 下载 nssm :http://nssm.cc/3. 安装N ...
- windows7 安装PHP7 本地网站搭建
2016年5月21日 18:21:12 星期六 PHP7用了vc14编译的, 因此windows要下载安装一个vc14的发行包, 只有16M 2016年6月1日 23:23:52 星期三 利用PHP自 ...
- MySQL 5.7 mysqlpump 备份工具说明
背景: MySQL5.7之后多了一个备份工具:mysqlpump.它是mysqldump的一个衍生,mysqldump就不多说明了,现在看看mysqlpump到底有了哪些提升,可以查看官方文档,这里针 ...
- iOS开发多线程篇 — GCD的常见用法
一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) withObject:nil ...
- UML大战需求分析——阅读笔记02
类图是理解面向对象思想的强有力工具,也是业务概念模型分析中最常用的一种UML图.对开发人员来说,并不是对每一个业务流程都很熟练,在客户那里传达过来的需求资料中,有很多术语会把思绪搞晕,他们之间错综复杂 ...
- [Unity3D]Unity+Android交互教程——让手机"动"起来
想要用Unity实现一个二维码扫描的功能,然后网上找插件,找到一个貌似叫EasyCodeScanner,但下载下来用用,真不好使,一导入运行就报错,调好错了再运行发现点按钮没反应,反复试了几遍发现还是 ...