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()
    
  • 相关阅读:
    【Codechef】Chef and Bike(二维多项式插值)
    USACO 完结的一些感想
    USACO 6.5 Checker Challenge
    USACO 6.5 The Clocks
    USACO 6.5 Betsy's Tour (插头dp)
    USACO 6.5 Closed Fences
    USACO 6.4 Electric Fences
    USACO 6.5 All Latin Squares
    USACO 6.4 The Primes
    USACO 6.4 Wisconsin Squares
  • 原文地址:https://www.cnblogs.com/guqing/p/6653843.html
Copyright © 2011-2022 走看看