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 ...
随机推荐
- TransactionScope 之分布式配置
.Net开发过程中,涉及多个数据库和不同数据库的分布式事务(Distributed Transaction)开发,有时会碰到“与基础事务管理器的通信失败”的错误.导致这个错误一般有下列三个原因:1) ...
- (转)PostgreSQL 兼容Oracle - orafce
转自:http://blog.163.com/digoal@126/blog/static/1638770402015112144250486/ PostgreSQL是和Oracle最接近的企业数据库 ...
- english
I will keep you posted. :我会随时通知您. wow! :(表示极大的惊奇或钦佩)哇,呀 np :no problem Thanks in advance! :先行感谢 take ...
- sql clear dblog
USE [master]GOALTER DATABASE ndFlightPolicy SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE ndFligh ...
- Js中文排序(拼音首字母)
演示地址:http://lar5.sinaapp.com/ 1.index.html <html xmlns="http://www.w3.org/1999/xhtml"&g ...
- 【bzoj3531】 [SDOI2014]旅行
题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰.为了方便,我们 ...
- Ubuntu 14 中,SecureCRT、SecureFX个性化设置
[SecureCRT 个性化设置] 打开设置路径:菜单栏 -> Opions -> Global Options -> General -> Default Session - ...
- MySQL Cluster 7.3.5 集群配置实例(入门篇)
一.环境说明: CentOS6.3(32位) + MySQL Cluster 7.3.5,规划5台机器,资料如下: 节点分布情况: MGM:192.168.137. NDBD1:192.168.137 ...
- poj 1695
用动态规划,dp[a][b][c]表示从位置最大的车在a(注意不是第一辆车),第二的车在b,第三的车在c开始最少需要的时间. 方程:dp[a][b][c]=max{dp[a+1][b][c], ...
- 如果asp.net mvc中某个action被执行了两次,请检查是不是以下的原因
注释 <link rel="icon" href="#"> 这一句后试试