zoukankan      html  css  js  c++  java
  • SQLAlchemy 增、删、该、查

    SQLAlchemy-03-1

    Table(表)类方式 - Insert

    # 导入引擎创建函数
    from sqlalchemy import create_engine
    # 导入语句处理函数
    from sqlalchemy.sql.expression import text
    
    # 导入元数据、表类
    from sqlalchemy import MetaData, Table
    # 导入数据类型
    from sqlalchemy import Integer, String, Text, DateTime
    # 导入列类和关联
    from sqlalchemy import Column, ForeignKey
    
    1. 创建引擎

      uri = 'mysql+pymysql://root:root@127.0.0.1:3306/user_system?charset=utf8'
      # create_engine()有一个关键字参数echo, 表示是否输出debug信息,默认为False
      engine = create_engine(uri, echo=True)
      
    2. 构建元数据

      # 元数据: 主要是指数据库表结构、关联等信息
      # 实例化MetaData(从引擎读取元数据)
      meta = MetaData(bind=engine)
      
    3. 获取表

      tb_user = Table('tb_user', meta, autoload=True, autoload_with=engine)
      
    4. Insert

      # 构造查询表达式(带有值)
      ins = tb_user.insert().values(username='ruirui', password='123456')
      print(str(ins))
      # 查看参数
      print(ins.compile().params)
      # 查看SQL
      print(ins.compile().string)
      
      # 创建连接
      conn = engine.connect()
      
      # 执行insert操作
      result = conn.execute(ins)
      # 如果是insert操作
      if result.is_insert:
          # 获取新添加的记录的主键
          print(result.inserted_primary_key)
      
      # 构造查询表达式(不带值)
      ins = tb_user.insert()
      print(str(ins))
      
      # 插入单条数据
      result = conn.execute(ins, username='aaron', password='hillel')
      
      # 插入多条数据
      data = [
          {'username': 'swartz', 'password' : '1234567'},
          {'username': 'gates', 'password' : '3456789'},
          {'username': 'bill', 'password' : '111222333'}
      ]
      result = conn.execute(ins, data)
      # 显示新增的条数
      print(result.rowcount)
      
      # 关闭连接
      conn.close()
      
    5. 销毁引擎

      engine.dispose()
      

    SQLAlchemy-03-2

    Table(表)类方式 - Delete

    # 导入引擎创建函数
    from sqlalchemy import create_engine
    # 导入语句处理函数
    from sqlalchemy.sql.expression import text
    
    # 导入元数据、表类
    from sqlalchemy import MetaData, Table
    # 导入数据类型
    from sqlalchemy import Integer, String, Text, DateTime
    # 导入列类和关联
    from sqlalchemy import Column, ForeignKey
    
    1. 创建引擎

      uri = 'mysql+pymysql://root:root@127.0.0.1:3306/user_system?charset=utf8'
      # create_engine()有一个关键字参数echo, 表示是否输出debug信息,默认为False
      engine = create_engine(uri, echo=True)
      
    2. 构建元数据

      # 元数据: 主要是指数据库表结构、关联等信息
      # 实例化MetaData(从引擎读取元数据)
      meta = MetaData(bind=engine)
      
    3. 获取表

      tb_user = Table('tb_user', meta, autoload=True, autoload_with=engine)
      
    4. Delete

      # 构造删除表达式(无条件)
      dlt = tb_user.delete()
      print(str(dlt))
      
      # 构造删除表达式(带条件: id >= 10)
      dlt = tb_user.delete().where(
          tb_user.columns['id'] >= 10
      )
      print(str(dlt))
      
      # 构造删除表达式(带条件: password以1开头)
      dlt = tb_user.delete().where(
          tb_user.columns['password'].startswith('1')
      )
      print(str(dlt))
      
      # 构造删除表达式(带多个条件: password包含3但是不包含9,且id<10)
      dlt = tb_user.delete().where(
          tb_user.columns['password'].like('%3%')
      ).where(
          tb_user.columns['password'].notlike('%9%')
      ).where(
          tb_user.columns['id'] < 10
      )
      print(str(dlt))
      
      # 创建连接
      conn = engine.connect()
      
      # 执行delete操作
      result = conn.execute(dlt)
      
      # 显示删除的条数
      print(result.rowcount)
      
      # 关闭连接
      conn.close()
      
    5. 显示SQL语句

      def structure_sql(sql_str_or_stmt, dialect_obj=None, sql_params=None, return_obj=False):
          '''
          构造SQL语句
          参数:
              sql_str_or_stmt: 原始(Raw)SQL字符串或Statement(Select、Insert、Update、Delete)对象
              dialect_obj: 数据库专用术语对象
              sql_params: 参数
              return_obj: 是否返回编译对象(默认否,返回字符串)
          refer: https://stackoverflow.com/questions/5631078/sqlalchemy-print-the-actual-query#answer-45551136
          '''
          stmt = sql_str_or_stmt
          # 如果是原始字符串,则包装成 Statement 对象
          if isinstance(stmt, str):
              stmt = text(stmt)
          
          if bool(sql_params):
              # Insert、Delete、Update和Select本身带有参数,无需额外参数绑定,没有bindparams()方法
              if hasattr(stmt, 'bindparams'):
                  stmt = stmt.bindparams(**sql_params)
      
          # 获取数据库专业术语
          if dialect_obj is None:
              # 如果没有指定,则从语句绑定的引擎中获取
              if bool(stmt.bind):
                  dialect_obj = stmt.bind.dialect
              else:
                  # 如果没有指定,也没有绑定引擎,则抛出错误
                  raise ValueError('参数 [dialect_obj] 未指定')
      
          # 编译语句
          full_sql = stmt.compile(
              dialect=dialect_obj,
              compile_kwargs={"literal_binds": True}
          )
          return full_sql if return_obj else full_sql.string
      
    6. 销毁引擎

      engine.dispose()
      

    SQLAlchemy-03-3

    Table(表)类方式 - Update

    # 导入引擎创建函数
    from sqlalchemy import create_engine
    # 导入语句处理函数
    from sqlalchemy.sql.expression import text
    
    # 导入元数据、表类
    from sqlalchemy import MetaData, Table
    # 导入数据类型
    from sqlalchemy import Integer, String, Text, DateTime
    # 导入列类和关联
    from sqlalchemy import Column, ForeignKey
    
    1. 创建引擎

      uri = 'mysql+pymysql://root:root@127.0.0.1:3306/user_system?charset=utf8'
      # create_engine()有一个关键字参数echo, 表示是否输出debug信息,默认为False
      engine = create_engine(uri, echo=True)
      
    2. 构建元数据

      # 元数据: 主要是指数据库表结构、关联等信息
      # 实例化MetaData(从引擎读取元数据)
      meta = MetaData(bind=engine)
      
    3. 获取表

      tb_user = Table('tb_user', meta, autoload=True, autoload_with=engine)
      
    4. Update

      # 构造更新表达式(无条件)
      upt = tb_user.update()
      print(str(upt))
      
      # 构造更新表达式(带条件: 8 <= id <= 9)
      upt_nd = tb_user.update().where(
          tb_user.columns.id.between(8, 9)
      )
      print(str(upt_nd))
      
      # 构造更新表达式(带值)
      upt = tb_user.update().values(username='新来的')
      print(str(upt))
      upt = tb_user.update().values(username='Python', password='py666789')
      print(str(upt))
      
      # 构造更新表达式(带条件和值)(可以用多个where)
      new_data = {
          'username': 'new数据',
          'password': '123456'
      }
      upt = tb_user.update().where(
          tb_user.columns['id'] > 10
      ).values(**new_data)
      print(str(upt))
      
      # 创建连接
      conn = engine.connect()
      
      # 执行update操作(对于带值的Update)
      result = conn.execute(upt)
      
      # 执行update操作(没有带值的Update)
      result = conn.execute(upt_nd, password='6ge654321')
      
      # 显示更新的条数
      print(result.rowcount)
      
      # 关闭连接
      conn.close()
      
    5. 销毁引擎

      engine.dispose()
      

    SQLAlchemy-03-4

    Table(表)类方式 - Select

    # 导入引擎创建函数
    from sqlalchemy import create_engine
    # 导入语句处理函数
    from sqlalchemy.sql.expression import text
    
    # 导入元数据、表类
    from sqlalchemy import MetaData, Table
    # 导入数据类型
    from sqlalchemy import Integer, String, Text, DateTime
    # 导入列类和关联
    from sqlalchemy import Column, ForeignKey
    
    1. 创建引擎

      uri = 'mysql+pymysql://root:root@127.0.0.1:3306/user_system?charset=utf8'
      # create_engine()有一个关键字参数echo, 表示是否输出debug信息,默认为False
      engine = create_engine(uri, echo=True)
      
    2. 构建元数据

      # 元数据: 主要是指数据库表结构、关联等信息
      # 实例化MetaData(从引擎读取元数据)
      meta = MetaData(bind=engine)
      
    3. 获取表

      tb_user = Table('tb_user', meta, autoload=True, autoload_with=engine)
      
    4. Select

      # 构造查询表达式(无条件)
      sel = tb_user.select()
      print(str(sel))
      
      # 构造查询表达式(带条件: 8 <= id <= 9)
      sel = tb_user.select().where(
          tb_user.columns.id.between(8, 9)
      )
      print(str(sel))
      
      # 创建连接
      conn = engine.connect()
      
      # 执行select操作
      result = conn.execute(sel)
      
      # 是否返回了结果
      if result.returns_rows:
          # 取一条
          print(result.fetchone())
          print(result.closed)
          # 取N条
          N = 2
          print(result.fetchmany(N))
          # 取剩余的所有条
          print(result.fetchall())
      
          # 关闭结果游标
          result.close()
      
      # 执行select操作
      result = conn.execute(sel)
      
      # 取第一条(first()方法自动关闭游标)
      print(result.first())
      print(result.closed)
      
      # 关闭连接
      conn.close()
      
    5. 销毁引擎

      engine.dispose()
      
  • 相关阅读:
    程序员修炼之道——从小工到专家 读书笔记
    Spring5 IOC原理
    2021下期末总结
    十年风雨,一个普通程序员的成长之路(五) 成长:得到与教训
    UmbracoXslDevelopmentTemplate CQ
    Asp.net中的数据绑定 CQ
    Building the DotNetNuke Module in Normal Asp.net Application CQ
    UmbracoDataTypeFirstGlance CQ
    Umbraco Home CQ
    UmbracoColor Picker–Demo CQ
  • 原文地址:https://www.cnblogs.com/cp9648/p/10415738.html
Copyright © 2011-2022 走看看