zoukankan      html  css  js  c++  java
  • python ORM的使用

    安装 >pip install sqlalchemy

    #coding=utf-8
    '''
    原始的sql语句
    CREATE TABLE user (
        id INTEGER NOT NULL AUTO_INCREMENT,
        name VARCHAR(32),
        password VARCHAR(64),
        PRIMARY KEY (id)
    
    )
    '''
    #使用orm代码
    
    import sqlalchemy
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    engine = create_engine("mysql+pymysql://root:123456@192.168.70.129/my",   #建立数据库连接
                           encoding='utf-8', echo=False) #打印echo信息
    Base = declarative_base()  # 生成orm基类
    class User(Base):
        __tablename__ = 'user1'  # 表名
        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)
    
    class User2(Base):
        __tablename__ = 'user2'  # 表名
        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)  # base运行之后就会把继承他的所有子类表创建起来
    #另一种不常用的创建方式
    '''
    from sqlalchemy import Table, MetaData, Column, Integer, String, ForeignKey
    from sqlalchemy.orm import mapper
    metadata = MetaData()
    user = Table('user', metadata,
                 Column('id', Integer, primary_key=True),
                 Column('name', String(50)),
                 Column('fullname', String(50)),
                 Column('password', String(12))
                 )
    class User(object):
        def __init__(self, name, fullname, password):
            self.name = name
            self.fullname = fullname
            self.password = password
    mapper(User,
           user)  # the table metadata is created separately with the Table construct, then associated with the User class via the mapper() function
    '''
    #————————————————————————增加————————————————————
    from sqlalchemy.orm import sessionmaker   #操作表要导入这个模块
    Session_class = sessionmaker(bind=engine)  # 创建与数据库的会话session class ,
    # 注意,这里返回给session的是个class,不是实例,与数据库连接绑定bind=engine
    Session = Session_class()  # 生成session实例 相当于pymysql里面的cursor
    # user_obj = User(name="dzz", password="123456")  # 生成你要创建的数据对象
    # user_obj1 = User(name="asd", password="123456")
    # user_obj2 = User2(name="asd", password="123456")
    # print(user_obj.name, user_obj.id)  # 此时还没创建对象呢,不信你打印一下id发现还是None
    # Session.add(user_obj)  # 把要创建的数据对象添加到这个session里, 一会统一创建
    # Session.add(user_obj2)
    # Session.add(user_obj1)
    #
    # print(user_obj.name, user_obj.id)  # 此时也依然还没创建
    # Session.commit()  # 现此才统一提交,创建数据
    # print(user_obj.name, user_obj.id,user_obj.password)
    #——————————————查询
    data = Session.query(User2).filter_by(name = 'zq').all()   #返回一个列表,查一条
    print '++>',data[0].name,data[0].password
    print '++>',data
    
    data = Session.query(User2).filter_by().all()    #在User2表的类里面加入了__repr__内置方法,就可显示了
    print data
    
    data = Session.query(User2).filter(User2.id>1).first() #单条,
    print '>>',data
    
    data = Session.query(User2).filter(User2.id>1).filter(User2.id<3).first()   #多条
    print '>>',data
    
    #修改——————————
    data = Session.query(User2).filter(User2.id>1).filter(User2.id<3).first()   #多条件
    print '>>',data
    data.name = 'rest'
    data.password = 'qqqqq'
    Session.commit()
    data = Session.query(User2).filter(User2.id>1).filter(User2.id<3).all()
    print '>>',data
    #回滚——————
    user_obj4 = User2(name="zte", password="123456")
    Session.add(user_obj4)
    print '>>>#',Session.query(User2).filter(User2.name.in_(['zte'])).all()
    Session.rollback()
    print Session.query(User2).filter(User2.name.in_('zte')).all()
    #分组统计
    data = Session.query(User2).filter(User2.id>1).filter(User2.id<4).count()
    print data
    
    from sqlalchemy import func
    
    
    #分组需要导入一个模块
    data = Session.query(User2.name,func.count(User2.name)).group_by(User2.name).all()
    print data
    
    #连表查询
    print Session.query( User2,User).filter(User2.id == User.id).all()
    #print Session.query( User2).join(User).all()   #要求两个表有外键关联
    #print Session.query( User2).join(User,isouter=True).all()
    
  • 相关阅读:
    [NOI Online 2021 提高组] 愤怒的小 N
    CF1474F 1 2 3 4 ...
    CF1466H Finding satisfactory solutions
    CF1336F Journey
    [PKUSC2021]代金券
    如何科学地设计对拍随机种子
    CF1168E Xor Permutations
    「JOISC 2019 Day2」两种运输
    springboot json参数
    springboot整合webserver应用
  • 原文地址:https://www.cnblogs.com/qiangayz/p/8667461.html
Copyright © 2011-2022 走看看