session

直接上代码,创建表结构,初始化部分数据。

 from sqlalchemy import create_engine

 engine = create_engine("mysql+pymysql://root:max123@127.0.0.1/test?charset=utf8", echo=True)

 from sqlalchemy import *
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
from datetime import datetime, date
from sqlalchemy.orm import deferred
Base = declarative_base() class Parent(Base):
__tablename__ = 'parent' id = Column(Integer(), primary_key=True)
name = Column(String(50))
summary = deferred(Column(Text))
children = relationship('ParentChild', back_populates='parent', cascade='all,delete-orphan') class Child(Base):
__tablename__ = 'child' id = Column(Integer(), primary_key=True)
name = Column(String(50))
parents = relationship('ParentChild', back_populates='child') class ParentChild(Base):
__tablename__ = 'parent_child' id = Column(Integer(), primary_key=True)
child_id = Column(Integer(), ForeignKey('child.id'), nullable=False)
parent_id = Column(Integer(), ForeignKey('parent.id'), nullable=False)
description = Column(String(100)) parent = relationship('Parent', back_populates='children')
child = relationship('Child', back_populates='parents') Base.metadata.drop_all(engine)
Base.metadata.create_all(engine) from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind=engine) db = Session() child_one = Child(name='purk1')
child_two = Child(name='purk2')
child_three = Child(name='purk3')
child_four = Child(name='purk4')
parent_one = Parent(name='Wu1')
parent_two = Parent(name='Wu2')
parent_child_one = ParentChild(description='association one')
parent_child_two = ParentChild(description='association two')
parent_child_one.child = child_one
parent_child_two.child = child_two
parent_one.children.extend([parent_child_one, parent_child_two]) db.add_all([parent_one, parent_two, child_four])
db.commit()

wfOrzbai

由简入难的开始

1. update

 parent_one = db.query(Parent).filter_by(name='wu1').first()
parent_one.name='wu_test'
db.merge(parent_one) # update or insert
db.commit()
 parent_one = db.query(Parent).filter_by(name='wu1').first()
parent_one.name='wu_test'
db.bulk_save_objects([parent_one])
db.commit()

结果

2. add

 parent_three =Parent(name='Wu3')
db.add(parent_three)
db.commit()
 parent_three =Parent(name='Wu3')
db.add_all([parent_three])
db.commit()
 parent_three =Parent(name='Wu3')
db.merge(parent_three)
db.commit()
 parent_three =Parent(name='Wu3')
db.bulk_save_objects([parent_three])
db.commit()

上面四种方式都可以得到下面的结果。

3. delete

 db.delete(parent_two)
db.commit()

parent_two 被删除了。

4. select

查的内容就是涉及到query了,留到下一章节来讲。

注:

class sqlalchemy.orm.session.Session(bind=None, autoflush=True, expire_on_commit=True,_enable_transaction_accounting=True, autocom-mit=False, twophase=False,

weak_identity_map=True,binds=None, extension=None, info=None,query_cls=<class ‘sqlalchemy.orm.query.Query’>)

的expire_on_commit的配置,默认是True

 parent = db.query(Parent).filter_by(name='wu1').first()

现在还没有做db.commit()的操作,访问parent的name属性,结果如下。

现在我做一个后台操作,直接数据库里面修改这parent实例对应的记录。

现在数据已经变为了wu_test,显然现在parent.name的值还是'Wu1',现在我在执行下面的代码。当我再次使用parent的时候,parent重新获取了一次数据。

只在commit和rollback的时候才是这样,close的时候是不会的。同时这个特性就要注意了。

sqlchemy - day3的更多相关文章

  1. 冲刺阶段day3

    day3 项目进展 今天周三,我们五个人难得的一整个下午都能聚在一起.首先我们对昨天的成果一一地查看了一遍,并且坐出了修改.后面的时间则是做出 登录界面的窗体,完善了登录界面的代码,并且实现了其与数据 ...

  2. python笔记 - day3

    python笔记 - day3 参考:http://www.cnblogs.com/wupeiqi/articles/5453708.html set特性: 1.无序 2.不重复 3.可嵌套 函数: ...

  3. python_way,day3 集合、函数、三元运算、lambda、python的内置函数、字符转换、文件处理

    python_way,day3 一.集合 二.函数 三.三元运算 四.lambda 五.python的内置函数 六.字符转换 七.文件处理 一.集合: 1.集合的特性: 特性:无序,不重复的序列 如果 ...

  4. Spark菜鸟学习营Day3 RDD编程进阶

    Spark菜鸟学习营Day3 RDD编程进阶 RDD代码简化 对于昨天练习的代码,我们可以从几个方面来简化: 使用fluent风格写法,可以减少对于中间变量的定义. 使用lambda表示式来替换对象写 ...

  5. Spark Tungsten揭秘 Day3 内存分配和管理内幕

    Spark Tungsten揭秘 Day3 内存分配和管理内幕 恭喜Spark2.0发布,今天会看一下2.0的源码. 今天会讲下Tungsten内存分配和管理的内幕.Tungsten想要工作,要有数据 ...

  6. Catalyst揭秘 Day3 sqlParser解析

    Catalyst揭秘 Day3 sqlParser解析 今天我们会进入catalyst引擎的第一个模块sqlparser,它是catalyst的前置模块. 树形结构 从昨天的介绍我们可以看到sqlPa ...

  7. Kakfa揭秘 Day3 Kafka源码概述

    Kakfa揭秘 Day3 Kafka源码概述 今天开始进入Kafka的源码,本次学习基于最新的0.10.0版本进行.由于之前在学习Spark过程中积累了很多的经验和思想,这些在kafka上是通用的. ...

  8. python s12 day3

    python s12 day3   深浅拷贝 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  9. Day3 - Python基础3 函数、递归、内置函数

    Python之路,Day3 - Python基础3   本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...

随机推荐

  1. XML基础概念

    XML基础概念 一.什么是XML. 可扩展标记语言(EXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. 二.XML特点 1 ...

  2. virsh default启动失败原因分析及解决

    启动default时出现如下错误提示:[root@node1 ~]# virsh net-start defaulterror: Failed to start network defaulterro ...

  3. NodeJS学习之文件操作

    NodeJS -- 文件操作 Buffer(数据块) JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一个与String对等的全局构造函数Buffer来提供对二进制数据的操作 ...

  4. Android常用系统广播

    关于Intent的使用,可参阅前章:http://www.cnblogs.com/caidupingblogs/p/5101669.html //关闭或打开飞行模式时的广播 Intent.ACTION ...

  5. ArrayList与List对象用法与区别

    比如: 代码如下 复制代码 string[] s=new string[3];//赋值s[0]="a";s[1]="b";s[2]="c"; ...

  6. mysql中权限参数说明

    1 授权表范围列的大小写敏感性+--------------+-----+-----+---------+----+-----------+------------+| 列           |Ho ...

  7. 使用wordpress自带ajax方法

    css3 提示只适用于高级浏览器: ChromeFirefoxSafariIE9+ valid.invalid.required的定义 代码如下 复制代码 input:required, input: ...

  8. 网站整站变灰的方法(不支持IE10)

    html { -ms-filter: grayscale(100%); -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); - ...

  9. UINavigationController与UITabbarController的样式

    之前虽然也手写过这两中视图控制器,但是更多的还是使用SB来创建,最近发现了一些问题,现在总结一下. 1.改变UINavigationBar的颜色 在UINavigationController中,之前 ...

  10. C语言知识总结(2)

    选择结构-if if(表达式) {} {}为作用域 多重if-else  例如: #include <stdio.h> int main(){ ; ){ printf("没有购物 ...