sqlalchemy orm的cascade的参数
#encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String,Float,func,and_,or_,Text,\
ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,relationship,backref
from random import randint HOSTNAME = '127.0.0.1' PORT = 3306 DATABASE = 'first_sqlalchemy' USERNAME = 'root' PASSWORD = '' #dialect+driver://username:password@host:port/database
DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/" \
"{db}?charset=utf8".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE) engine = create_engine(DB_URI) Base = declarative_base(engine) # Session = sessionmaker(engine)
# session = Session() session = sessionmaker(engine)() #Session(**local_kw) class User(Base):
__tablename__ = 'user'
id = Column(Integer,primary_key=True,autoincrement=True)
username = Column(String(50),nullable=False,unique=True) class Article(Base):
__tablename__ = 'article'
id = Column(Integer,primary_key=True,autoincrement=True)
article_name = Column(String(50),nullable=False)
uid = Column(Integer,ForeignKey('user.id'))
author = relationship('User',backref='articles',cascade='save-update,delete')#其实这里还有默认字段cascade #cascade的属性,只能当前字段上,这里还有另一种写法,两个关联字段都设置
# author = relationship('User', backref=backref('articles',cascade='save-update,delete'), cascade='save-update,delete') # cascade=save-update:默认选项,在添加一条数据的时候,会把其它和它相关联的数据都添加到数据中,
#这就是 cascade = save-update的作用。
#merge:默认选项。当使用session.merge,合并一个对象的时候,会将使用了relationship相关联的对象也进行merge操作。
#expunge:移除操作的时候,会将相关联的对象也进行移除。这个操作只是从session中移除,并不会真正的从数据库中删除。
#增加数据 def init_db():
#清空数据库,除多对多关系外
Base.metadata.drop_all()
#把数据映射到数据中
Base.metadata.create_all()
user = User(username='辰东')
article = Article(article_name='遮天')
article1 = Article(article_name='圣墟')
article.author = user
article1.author = user
session.add_all([article, article1])
session.commit() #cascade = delete ,relationship关联的数据删除,只要有关联的数据都删除 def operation():
#获取article的对象,这个对象关联(article.author=user)也就是user=session.query(User).first()的对象
article = session.query(Article).first()
session.delete(article)#这里删除article对象,由于cascde=delete这个属性,relationship关联的user对象也会随之删除 # session.merge(article)相当字典的update操作,有就替换掉,没有就合拼
#session.expunge(article)只会将对象从session中删除,不会从数据库中删除,
#区别session.delete(article)
session.commit() if __name__ == '__main__':
# init_db()
operation()
sqlalchemy orm的cascade的参数的更多相关文章
- Django之ORM字段和字段参数
ORM介绍 ORM概念 ORM由来 ORM的优势 ORM的劣势 ORM总结 Django中的ORM Django项目使用MySQL数据库 Model 快速入门 字段 自定义字段 字段参数 Model ...
- Python sqlalchemy orm 多外键关联
多外键关联 注:在两个表之间进行多外键链接 如图: 案例: # 创建两张表并添加外键主键 # 调用Column创建字段 加类型 from sqlalchemy import Integer, For ...
- sqlalchemy orm 操作 MySQL
一.ORM介绍 orm英文全称object relational mapping,是对象映射关系程序,简单来说类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了 ...
- SQLAlchemy ORM教程之二:Query
from:https://www.jianshu.com/p/8d085e2f2657 这是继SQLAlchemy ORM教程之一:Create后的第二篇教程.在上一篇中我们主要是解决了如何配置ORM ...
- Django中ORM介绍和字段参数
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
- Django框架 之 ORM 常用字段和参数
Django框架 之 ORM 常用字段和参数 浏览目录 常用字段 字段合集 自定义字段 字段参数 DateField和DateTimeField 关系字段 ForeignKey OneToOneFie ...
- Django 之 ORM 字段和字段参数
ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...
- Django ORM字段和字段参数
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
- Python SQLAlchemy ORM示例
SQLAlchemy的是Python的SQL工具包和对象关系映射,给应用程序开发者提供SQL的强大功能和灵活性. 安装 pip install mysql-python pip install sql ...
随机推荐
- Java开发工具汇总
1. Arthas 是Alibaba开源的Java诊断工具 Java动态追踪,对生产环境出现出现bug的情况下,无法调试处理问题,可以借鉴该工具进行问题分析. 原理介绍:Java动态追踪技术探究 Ar ...
- Codeforces 838E Convex Countour
题 OvO http://codeforces.com/contest/838/problem/E (IndiaHacks 2nd Elimination 2017 (unofficial, unra ...
- B - Problem Arrangement ZOJ - 3777
Problem Arrangement ZOJ - 3777 题目大意:有n道题,第i道题第j个做可以获得Pij的兴趣值,问至少得到m兴趣值的数学期望是多少,如果没有的话就输出No solution. ...
- 灰度图像--图像分割 Scharr算子
学习DIP第46天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发: https://g ...
- jsPDF – 基于 HTML5 的强大 PDF 生成工具
jsPDF 是一个基于 HTML5 的客户端解决方案,用于生成各种用途的 PDF 文档. 使用方法很简单,只要引入 jsPDF 库,然后调用内置的方法就可以了. 米扑科技项目用到了HHTML5生成PD ...
- vscode编辑器
插件 Auto Close Tag 自动关闭标签 Auto Rename Tag 自动修改标签 Bracket Pair Colorizer 多层括号不同颜色显示 EditorConfig fo ...
- 两篇将rf和boosting方法用在搜索排序上的paper
在网上看到关于排序学习的早期文章,这两篇文章大致都使用了Random Forest和Boosting方法. 一.paper 1.Web-Search Ranking with Initialized ...
- window7上爬虫框架Scrapy的安装 --错误分析lxml
本文讲解的是python已经安装成功的情况下,且pip可以使用 版本:python2.7.10 #安装 pip install Scrapy 在安装Scrapy框架时总会报lxml安装不了的各种错误, ...
- MemoScope.Net
What is MemoScope.Net ? It's a tool to analyze .Net process memory: it can dump an application's mem ...
- Python——语言基础
1.数据类型 1.1.字符串 1.1.1.变量声明 1.1.2.相关函数 1.2.布尔类型 1.2.1.变量声明 1.2.2.相关函数 1.3.数字类型 1.3.1.变量声明 1.3.2.相关函数 1 ...