zoukankan      html  css  js  c++  java
  • 04:sqlalchemy操作数据库 不错

    目录:

    1.1 ORM介绍(作用:不用原生SQL语句对数据库操作)     返回顶部

      1、什么是ormorm是一种术语而不是软件)

          1)orm英文全称object relational mapping,就是对象映射关系程序
          2)简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的
          3)为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系
          4)这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,
               而不用直接使用sql语言

                      

      2、ORM作用
          1)隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单
               易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来
          2)ORM使我们构造固化数据结构变得简单易行。

      3、ORM缺点
          1)无可避免的,自动化意味着映射和关联管理,代价是牺牲性能
          2)现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。

    1.2 安装sqlalchemy并创建表     返回顶部

       1、在win10中直接用pip3安装即可

          pip3 install sqlalchemy

      2、sqlalchemy可以支持多种数据库的连接使用:下面是常用的几种

          MySQL-Python
              mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>

          pymysql
              mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]

          MySQL-Connector
              mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>

          cx_Oracle
              oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]

          更多详见: http://docs.sqlalchemy.org/en/latest/dialects/index.html

      3、sqlalchemy说明

          1) sqlalchemy的底层还是对mysqldb, pymysql的封装
          2) 我们不用写原生SQL了,但是sqlalchemy执行的时候还是要用原生SQL
          3) Sqlalchemy就是通过使用mysqldb, pymysql等来执行原生SQL语句

      4、创建表

        1. 使用原生sql创建表

            CREATE TABLE user (
              id INTEGER NOT NULL AUTO_INCREMENT, 
              name VARCHAR(32), 
              password VARCHAR(64), 
              PRIMARY KEY (id)
            )

        2. 使用sqlalchemy创建表的两种方法

     法1:使用sqlalchemy创建表(不常用
     法2:使用sqlalchemy创建表(常用方法
    复制代码
    #! -*- coding:utf8 -*-
    import sqlalchemy
    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    
    '''第一步:连接数据库'''
    engine = create_engine("mysql+pymysql://root:1@127.0.0.1/bsp?charset=utf8")
    # engine = create_engine("mysql+pymysql://root:1@127.0.0.1/tomdb",encoding='utf-8', echo=True)
    
    '''附加: 无论是增删改查都要先创建与数据库的会话session class'''
    #创建与数据库的会话session class ,注意,这里返回给session的是个class类,不是实例
    Session_class = sessionmaker(bind=engine)       #创建用于数据库session的类
    session = Session_class()                       #这里才是生成session实例可以理解为cursor
    
    
    '''第二步:操作数据库'''
    #1、查看mysql中有哪些数据库
    dbs=session.execute('show databases;').fetchall()
    
    #2、切换当前数据库
    session.execute('use bsp;')
    
    #3、查询时过滤出第一条
    row1=session.execute('select * from relations_department where Id>1;').first()
    fid_id = row1.fid_id
    
    #4、一对多关联查询: 根据上面查询的父部门id 可以找到父部门信息
    row2=session.execute('select * from relations_department where Id=%s;'%fid_id).first()
    print row2.name   # 政府事业部
    复制代码

    1.3 使用sqlalchemy对表基本操作     返回顶部

     1、连接mysql
     2、创建表结构
     3、创建与数据库的会话:增删改查都要用这个会话
     4、
     5、删
     6、改
     7、简单查找
     8、高级查找
     9、分组
     10、回滚

    1.4 一对多外键关联     返回顶部

     models.py 需要实现一对多联级删除时需要添加参数
     models.py 创建一对多表结构
     1、增:向对多表中插入数据
     2、查:一对多正向反向查找
     3、改
     4、删:联级需要在创建表时添加参数

    1.5 sqlalchemy多对多关联     返回顶部

     法1:models.py 自己定义第三张表
     1、增
     2、查:多对多正向发现查找
     3、改
     4、删

    1.6 sqlalchemy执行原生SQL语句 

      1、执行原生SQL语句

     python执行原生SQL

      2、找到当前数据库中所有非空表

     找到数据库中所有非空表
  • 相关阅读:
    cin 与 getline
    ubuntu换源
    unbuntu 安装 bochs
    np.random.randint()的返回值
    vs2019 写入访问权限冲突
    44.Android之Shape设置虚线、圆角和渐变学习
    43.Android之ListView中BaseAdapter学习
    42.Android之ListView中ArrayAdapter简单学习
    Java编程思想学习(十六) 并发编程
    Java编程思想学习(十五) 注解
  • 原文地址:https://www.cnblogs.com/ExMan/p/10313789.html
Copyright © 2011-2022 走看看