• 9、ORM框架------SQLAlchemy(1)


    ORM:对象关系映射

    SQLAlchemy是code  first

    而django中的orm既有code  first(先有类),又有db  first(先有数据库及表)

    安装:

    sudo apt install python3-pip
    pip3 install sqlalchemy    #只负责将类及对象转换为sql语句
    pip3 install pymysql    #负责连接mysql并执行sql语句,其它还有mysqldb

    创建数据库表:

    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column,Index,Integer,UniqueConstraint,String,ForeignKey
    
    engine = create_engine("mysql+pymysql://root:w@127.0.0.1:3306/study?charset=utf8",echo=True,max_overflow=5)
    #engine用于设置连接,echo在进行数据库表操作时,是否显示过程,可以不写;max_overflow最大连接数,不写默认是5。注意编码的写法! Base
    = declarative_base()
    #生成orm基类,之后的类都要继承它
    class UserType(Base): __tablename__ = 'usertype'    #表名,小写 id = Column(Integer,primary_key=True,autoincrement=True) title = Column(String(50)) class Users(Base): __tablename__ = 'users' id = Column(Integer,primary_key=True,autoincrement=True) name = Column(String(32),nullable=True,default='lyb',unique=True) email = Column(String(16),index=True) user_type_id = Column(Integer,ForeignKey('usertype.id')) __table_args__ = ( UniqueConstraint('name','email',name='uix_name_email'),  #组合索引 ) Base.metadata.create_all(engine)
    #创建表,此时运行脚本,在数据库中会创建继承了Base的表。另外再次运行时不会重复创建,也不会报错
    # Base.metadata.drop_all(engine)
    删除表

    数据的增删改查: 在query.py模块中

    创建会话:

    from sqlalchemy.orm import sessionmaker
    
    Session = sessionmaker(bind=engine)
    # 绑定连接引擎,创建会话类,注意返回的类,不是实例
    sess = Session()
    # 此时才生成会话实例

    增:

    obj1 = UserType(title='普通用户1')
    obj2 = UserType(title='白金用户2')
    obj3 = UserType(title='超级用户3')
    # 创建数据对象,对象 == 数据行,类 == 表
    sess.add_all([obj1,obj2,obj3])
    # 将数据添加到会话,一次多个,也可以一次一个用add(obj1)
    
    sess.commit()
    # 统一提交并创建数据

    另一种增法:还可以把下面的合并为一个迭代

    type = ['普通','白金','黑金','超级']
    for item in type:
        sess.add(UserType(title=item))
    
    user = [('qqq',2),('eee',1),('ddd',2),('rrr',4)]
    for item in user:
        sess.add(User(name=item[0],usertype_id=item[1]))
    sess.commit()

    查:

    # q_list1 = sess.query(UserType).all()
    # for row in q_list1:
    #     print(row.id,row.title)
    
    q_list2 = sess.query(UserType).filter(UserType.id!=2)
    # >, >=, <, <=,==,!=
    for row in q_list2:
        print(row.id,row.title)

    #或,直接用关键字
    q_list2 = sess.query(UserType).filter_by(id=2,title='普通用户')

    直接查询:

    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    
    engine = create_engine('mysql+pymysql://root:w@127.0.0.1:3306/lx?charset=utf8')
    Session = sessionmaker(bind=engine)
    sess = Session()
    res = sess.execute('select NAME ,type from USER LEFT JOIN usertype ON typeid=tid')
    for i in res:
        print(i[0],i[1])
    qqq 普通
    lll 白银
    rew 白银
    yue 黑金
    cvb 超级

    删:注意需要提交

    sess.query(UserType.id,UserType.title).filter(UserType.id<=2).delete()
    sess.commit()

    改:

    #满足条件的title全改为‘用户’
    sess.query(UserType.id,UserType.title).filter(UserType.id>=5).update({'title':'用户'}) sess.commit()
    #满足添加的title的值后全部加上‘x’。字符串情况
    sess.query(UserType.id,UserType.title).filter(UserType.id>=5).update({UserType.title: UserType.title + 'x'}, synchronize_session=False) sess.commit()
    #数字情况
    sess.query(UserType.id,UserType.title).filter(UserType.id>=5).update({UserType.title: UserType.title - 2}, synchronize_session='evaluate') sess.commit()
    渐变 --> 突变
  • 相关阅读:
    ABP框架(asp.net core 2.X+Vue)运行前端(转)
    Spring学习指南第3版例子程序导入idea20.02
    Docker运行jar包(转)
    centos7使用docker搭建运行环境并部署jar(转)
    centos7修改docker镜像源的方法(转)
    虚拟机下CentOS7安装Docker(转)
    Virtual Box配置CentOS7网络(图文教程)(转)
    虚拟机docker运行jar程序
    docker安装
    【591】通过 Terminal 直接获取 GitHub 源码
  • 原文地址:https://www.cnblogs.com/lybpy/p/8046670.html
Copyright © 2020-2023  润新知