• 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)
    
  • 相关阅读:
    Android开发总结
    Java开发中的23种设计模式详解(转)
    Linux下Tomcat的安装配置
    Linux下Tomcat的启动、关闭、杀死进程
    在陌生Linux环境查看Tomcat服务的方法
    JAVA用freemarker生成复杂Excel。(freemarker)
    JAVA生成Word文档(经过测试)
    jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space
    TabHost
    ProgressBar
  • 原文地址:https://www.cnblogs.com/bigberg/p/8310577.html
Copyright © 2020-2023  润新知