zoukankan      html  css  js  c++  java
  • python--orm示例

    建表插入数据:

    import sqlalchemy
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer,String,Date
    from sqlalchemy.orm import sessionmaker
    
    engine = create_engine("mysql+pymysql://tim:sina4433@localhost/test",
                           encoding = "utf-8",echo=True)
    
    Base = declarative_base()
    
    class User(Base):
        __tablename__= "user"
        id = Column(Integer,primary_key=True)
        name = Column(String(32))
        password = Column(String(64))
    Base.metadata.create_all(engine)  #创建表结构
    
    Session_class = sessionmaker(bind=engine) #创建与数据库的会话session class,注意这里返回给session的是个类,不是实例
    Session = Session_class() #生成session实例
    
    user_obj = User(name='tim',password='sina4433') #生成你要创建的数据对象
    user_obj2 = User(name = 'jack',password='abc')
    print(user_obj.name,user_obj.id) #此时还没创建对象,不信打印一下id,还是None
    
    Session.add(user_obj) # 把要创建的数据对象添加到这个session里,一会儿统一创建
    Session.add(user_obj2)
    print(user_obj,user_obj.id) #此时也依然还没创建
    Session.commit()
    

    查询:

    import sqlalchemy
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer,String,Date
    from sqlalchemy.orm import sessionmaker
    
    engine = create_engine("mysql+pymysql://tim:sina4433@localhost/test",
                           encoding = "utf-8")
    
    Base = declarative_base()
    
    class User(Base):
        __tablename__= "user"
        id = Column(Integer,primary_key=True)
        name = Column(String(32))
        password = Column(String(64))
    
        def __repr__(self):
            return "<%s name:%s>" % (self.id,self.name)
    
    Base.metadata.create_all(engine)  #创建表结构
    
    Session_class = sessionmaker(bind=engine) #创建与数据库的会话session class,注意这里返回给session的是个类,不是实例
    Session = Session_class() #生成session实例
    
    # user_obj = User(name='tim',password='sina4433') #生成你要创建的数据对象
    # user_obj2 = User(name = 'jack',password='abc')
    # print(user_obj.name,user_obj.id) #此时还没创建对象,不信打印一下id,还是None
    #
    # Session.add(user_obj) # 把要创建的数据对象添加到这个session里,一会儿统一创建
    # Session.add(user_obj2)
    # print(user_obj,user_obj.id) #此时也依然还没创建
    # Session.commit()
    
    # data = Session.query(User).filter_by().all()  #结果是一个列表
    # print(data)
    
    # data = Session.query(User).filter_by(name='tim').all()  #结果是一个列表
    # print(data[0].id)
    
    # data = Session.query(User).filter_by(id=1).all()
    # print(data)
    
    # data = Session.query(User).filter(User.id>1).all()
    # print(data)
    
    # data = Session.query(User).filter(User.id>1).filter(User.id<4).all()
    # print(data)
    
    data = Session.query(User).filter(User.id>1).filter(User.id<4).first()
    print(data)
    # #更改数据
    # data.name = "zhang"
    # data.password = "Shit"
    # Session.commit()
    
    # my_user = Session.query(User).filter_by(id=1).first()
    # my_user.name = 'Jack'
    #
    # fake_user = User(name='Rain',password='123456')
    #
    # Session.add(fake_user)
    #
    # print(Session.query(User).filter(User.name.in_(['Jack','rain'])).all())
    #
    # Session.rollback()
    #
    # print(Session.query(User).filter(User.name.in_(['Jack','rain'])).all())
    

    多表连接:

    import sqlalchemy
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer,String,Enum,ForeignKey,DATE
    from sqlalchemy.orm import sessionmaker,relationship
    
    engine = create_engine("mysql+pymysql://tim:sina4433@localhost/test",
                           encoding = "utf-8")
    Base = declarative_base()
    
    class Student(Base):
        __tablename__= "student"
        id = Column(Integer,primary_key=True,autoincrement=True)
        name = Column(String(32),nullable=True)
        register_date = Column(DATE,nullable=True)
        #加个关联关系
    
    
    
        def __repr__(self):
            return "<%s name:%s>"%(self.id,self.name)
    
    
    class StudyRecord(Base):
        __tablename__ = "StudyRecord"
        id = Column(Integer,primary_key=True,autoincrement=True)
        day = Column(Integer)
        status = Column(String(32))
        stu_id = Column(Integer,ForeignKey(Student.id))
        #加个关联关系
        student = relationship("Student",backref="my_study_record")
    
        def __repr__(self):
            return "<%s day:%s status:%s>"%(self.student.name,self.day,self.status)
    
    
    Base.metadata.create_all(engine)  #创建表结构
    Session_class = sessionmaker(bind=engine) #创建与数据库的会话session class,注意这里返回给session的是个类,不是实例
    session = Session_class() #生成session实例
    
    
    # ret = Session.query(Student).join(Study_record).all()  #这种方式需要主外键关联
    # print(ret)
    
    # ret = session.query(Student,StudyRecord).filter(Student.id==StudyRecord.stu_id).all()
    # print(ret)
    
    # s1 = Student(name="Alex",register_date='2013-02-01')
    # s2 = Student(name="Jack",register_date='2014-04-01')
    # s3 = Student(name="gao",register_date='2013-10-01')
    # s4 = Student(name="wang",register_date='2011-11-01')
    #
    # study_obj1 = StudyRecord(day=1,status="YES",stu_id=1)
    # study_obj2 = StudyRecord(day=2,status="NO",stu_id=1)
    # study_obj3 = StudyRecord(day=3,status="YES",stu_id=1)
    # study_obj4 = StudyRecord(day=1,status="YES",stu_id=2)
    #
    # session.add_all([s1,s2,s3,s4,study_obj1,study_obj2,study_obj3,study_obj4])
    # session.commit()
    
    #查出Alex上了几节课
    stu_obj = session.query(Student).filter(Student.name=='Alex').first()
    print(stu_obj.my_study_record)
    

    多外键关联:

    orm_many_fk

    from sqlalchemy import Integer, ForeignKey,String,Column
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm import relationship,sessionmaker
    from sqlalchemy import create_engine
    
    
    Base = declarative_base()
    
    class Customer(Base):
        __tablename__ = 'customer'
        id = Column(Integer,primary_key=True)
        name = Column(String(64))
    
        billing_address_id = Column(Integer,ForeignKey("address.id"))
        shipping_address_id = Column(Integer,ForeignKey("address.id"))
    
        billing_address = relationship("Address",foreign_keys=[billing_address_id])
        shipping_address = relationship("Address",foreign_keys=[shipping_address_id])
    
    class Address(Base):
        __tablename__ = 'address'
        id = Column(Integer,primary_key=True)
        street = Column(String(64))
        city = Column(String(64))
        state = Column(String(64))
    
        def __repr__(self):
            return self.street
    
    engine = create_engine("mysql+pymysql://tim:sina4433@localhost/test",
                           encoding = "utf-8")
    Base.metadata.create_all(engine)  #创建表结构
    Session_class = sessionmaker(bind=engine) #创建与数据库的会话session class,注意这里返回给session的是个类,不是实例
    session = Session_class() #生成session实例
    

     orm_api:

    from day11 import orm_many_fk
    from sqlalchemy.orm import sessionmaker
    
    Session_class = sessionmaker(bind=orm_many_fk.engine)
    session = Session_class()
    
    # addr1 = orm_many_fk.Address(street="Tiantongyuan",city='ChangPing',state='BJ')
    # addr2 = orm_many_fk.Address(street="Wudaokou",city='Haidian',state='BJ')
    # addr3 = orm_many_fk.Address(street="Yanjiao",city='LangFang',state='HB')
    # #
    # session.add_all([addr1,addr2,addr3])
    #
    # c1 = orm_many_fk.Customer(name="Alex",billing_address=addr1,shipping_address=addr2)
    # c2 = orm_many_fk.Customer(name="Jack",billing_address=addr3,shipping_address=addr3)
    #
    # session.add_all([c1,c2])
    # session.commit()
    
    
    obj = session.query(orm_many_fk.Customer).filter(orm_many_fk.Customer.name=="alex").first()
    print(obj.name,obj.billing_address,obj.shipping_address)
    

    多对多关联:

    orm_m2m:

    # -*- coding: utf-8 -*-
    from sqlalchemy import Table, Column, Integer,String,DATE, ForeignKey
    from sqlalchemy.orm import relationship
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    
    
    Base = declarative_base()
    
    book_m2m_author = Table('book_m2m_author', Base.metadata,
                            Column('book_id',Integer,ForeignKey('books.id')),
                            Column('author_id',Integer,ForeignKey('authors.id')),
                            )
    
    class Book(Base):
        __tablename__ = 'books'
        id = Column(Integer,primary_key=True)
        name = Column(String(64))
        pub_date = Column(DATE)
        authors = relationship('Author',secondary=book_m2m_author,backref='books')
    
        def __repr__(self):
            return self.name
    
    class Author(Base):
        __tablename__ = 'authors'
        id = Column(Integer, primary_key=True)
        name = Column(String(32))
    
        def __repr__(self):
            return self.name
    
    engine = create_engine("mysql+pymysql://root:sina4433@localhost/mytest?charset=utf8")
    Base.metadata.create_all(engine)  #创建表结构
    Session_class = sessionmaker(bind=engine) #创建与数据库的会话session class,注意这里返回给session的是个类,不是实例
    session = Session_class() #生成session实例
    
    #插入中文,请注意在创建DATABASE时需要指定数据库字符集
    b4 = Book(name='浪潮之巅',pub_date="2011-10-10")
    
    session.add_all([b4,])
    session.commit()
    

     orm_m2m_api:

    import orm_m2m
    from sqlalchemy.orm import sessionmaker
    
    Session_class = sessionmaker(bind=orm_m2m.engine)
    session = Session_class()
    
    #################################创建#####################################
    # b1 = orm_m2m.Book(name="learn python",pub_date="2013-12-12")
    # b2 = orm_m2m.Book(name="C++plus",pub_date="2012-10-22")
    # b3 = orm_m2m.Book(name="learn hook up girls",pub_date="2015-01-31")
    # a1 = orm_m2m.Author(name="Tim")
    # a2 = orm_m2m.Author(name="Jack")
    # a3 = orm_m2m.Author(name="Rain")
    #
    # b1.authors = [a1,a3]
    # b2.authors = [a1,a2]
    # b3.authors = [a1,a2,a3]
    #
    # session.add_all([b1,b2,b3,a1,a2,a3])
    # session.commit()
    
    #########################################################################
    
    ################################查询#####################################
    # author_obj = session.query(orm_m2m.Author).filter(orm_m2m.Author.name=='Tim').first()
    # print(author_obj.books)
    # print(author_obj.books[1].pub_date)
    # book_obj = session.query(orm_m2m.Book).filter(orm_m2m.Book.name=="learn python").first()
    # print(book_obj.authors)
    #########################################################################
    
    ################################删除#####################################
    #通过书删除作者:
    # author_obj = session.query(orm_m2m.Author).filter(orm_m2m.Author.name=="tim").first()
    # book_obj = session.query(orm_m2m.Book).filter(orm_m2m.Book.name=="learn python").first()
    # book_obj.authors.remove(author_obj) #从一本书里删除一个作者
    # session.commit()
    #
    # #直接删除作者
    # author_obj2 = session.query(orm_m2m.Author).filter(orm_m2m.Author.name=="Jack").first()
    # session.delete(author_obj2)
    # session.commit()
    
  • 相关阅读:
    医疗器械那些事
    内审员学习1
    BA
    GMP文件分类与编码管理规程
    杂-电工学
    产品学习1
    模拟电子技术1
    电路组装1
    Unable to simultaneously satisfy constraints.
    xcode
  • 原文地址:https://www.cnblogs.com/guqing/p/6653843.html
Copyright © 2011-2022 走看看