zoukankan      html  css  js  c++  java
  • SQLAlchemy 事务

    定义两个表User和Person, 先插入第一个表,抛出异常,在插入第二个表

    UserModel

    from sqlalchemy import Column, Integer, VARCHAR
    from sqlalchemy.orm import declarative_base
    
    Base = declarative_base()
    
    
    class User(Base):
        __tablename__ = 'users'
        id = Column(Integer, primary_key=True)
        name = Column(VARCHAR(256), nullable=False)
        age = Column(Integer)
        place = Column(VARCHAR(256), nullable=False)
    
        def __init__(self, id, name, age, place):
            self.id = id
            self.name = name
            self.age = age
            self.place = place

    PersonModel

    from sqlalchemy import Column, Integer, VARCHAR
    from sqlalchemy.orm import declarative_base
    
    Base = declarative_base()
    
    
    class Person(Base):
        __tablename__ = 'person'
        id = Column(Integer, primary_key=True)
        name = Column(VARCHAR(256), nullable=False)
        age = Column(Integer)
    
        def __init__(self, id, name, age):
            self.id = id
            self.name = name
            self.age = age

    事务Demo

    from MySQLUtil import get_session
    from PersonModel import Person
    from UserModel import User
    
    
    def raise_error():
        raise Exception
    
    
    def add_user(user, person):
        session = get_session()
        session.add(user)
        raise_error()
        session.add(person)
        session.commit()
        session.close()
    
    
    def query_person():
        session = get_session()
        persons = session.query(Person).all()
        session.close()
        return persons
    
    
    if __name__ == '__main__':
        # id, name, age, place
        wangwu_user = User(id=3, name='wangwu1', age=18, place='Chengdu')
        # id, name, age
        wangwu_person = Person(id=2, name='wangwu1', age=18)
        add_user(wangwu_user, wangwu_person)
    Please call me JiangYouDang!
  • 相关阅读:
    linux下解除端口占用
    设计模式(二)观察者模式
    设计模式(一) 策略模式
    loj #6235. 区间素数个数
    loj #2013. 「SCOI2016」幸运数字
    loj #6014. 「网络流 24 题」最长 k 可重区间集
    loj #6013. 「网络流 24 题」负载平衡
    loj #2255. 「SNOI2017」炸弹
    loj #2051. 「HNOI2016」序列
    loj #6122. 「网络流 24 题」航空路线问题
  • 原文地址:https://www.cnblogs.com/luckygxf/p/15073314.html
Copyright © 2011-2022 走看看