zoukankan      html  css  js  c++  java
  • sqlalchemy基本使用

    一、ORM介绍

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

      

    orm的优点:

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

    缺点:

    1. 无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。

    二、sqlalchemy

      在Python中,最有名的ORM框架是SQLAlchemy。

      

      Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:

    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
    

      安装sqlalchemy

    pip3 install sqlalchemy
    

      

     三、sqlalchemy基本使用

    3.1 创建表

      sql语句创建表:

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

      使用sqlalchemy创建

    # -*- coding: UTF-8 -*-
    
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    from sqlalchemy.orm import sessionmaker
    
    engine = create_engine("mysql+pymysql://bigberg:111111@172.16.200.49:3306/study",
                           encoding="utf-8", echo=True)  # 连接数据库,echo=True =>把所有的信息都打印出来
    
    Base = declarative_base()  # 生成orm基类
    
    
    class User(Base):
        __tablename__ = "user"  # 表名
        id = Column(Integer, primary_key=True)
        name = Column(String(32))
        passwd = Column(String(64))
    
    
    Base.metadata.create_all(engine)  # 这边的意思是创建定义所有的表
    

      查看新建的表:

    mysql> desc user;
    +--------+-------------+------+-----+---------+----------------+
    | Field  | Type        | Null | Key | Default | Extra          |
    +--------+-------------+------+-----+---------+----------------+
    | id     | int(11)     | NO   | PRI | NULL    | auto_increment |
    | name   | varchar(32) | YES  |     | NULL    |                |
    | passwd | varchar(64) | YES  |     | NULL    |                |
    +--------+-------------+------+-----+---------+----------------+
    3 rows in set (0.02 sec)
    

    3.2 插入数据 

      使用sqlalchemy插入数据

    # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
    Session_class = sessionmaker(bind=engine)
    
    # 生成session实例
    Session = Session_class()
    
    # 生成你要创建的数据对象
    user_obj = User(name="bigberg", passwd="twgdh123")
    
    # 此时还没创建对象呢,不信你打印一下id发现还是None
    print(user_obj.name, user_obj.id)
    
    # 把要创建的数据对象添加到这个session里, 一会统一创建
    Session.add(user_obj)
    
    # 此时也依然还没创建
    print(user_obj.name, user_obj.id)
    
    # 现此才统一提交,创建数据
    Session.commit()  
    mysql> select * from user;
    +----+---------+----------+
    | id | name    | passwd   |
    +----+---------+----------+
    |  1 | bigberg | twgdh123 |
    +----+---------+----------+
    1 row in set (0.00 sec)
    
  • 相关阅读:
    C# 解析 json
    鸡汤一则
    jsp 环境配置记录
    jquery validate 自定义验证方法
    axure rp pro 7.0(页面原型工具)
    跨数据库服务器查询步骤
    .net 直接输出远程文件到浏览器和下载文件保存到本机
    URL中文乱码处理总结(转)
    使用ajax上传中遇到的问题
    Web 通信 之 长连接、长轮询(转)
  • 原文地址:https://www.cnblogs.com/bigberg/p/8310577.html
Copyright © 2011-2022 走看看