zoukankan      html  css  js  c++  java
  • Python SQLAlchemy 模块

    SQLAlchemy 简介:

    SQLAlchemy 是用于实现 ORM(Object Relational Mapping,对象关系映射)的一个模块,即把数据库的表结构映射到对象上
    在 Python 中,也就是将关系型数据库表结构抽象成面向对象的 Python 类,将表操作转换成类操作,避免了复杂的 SQL 语句编写

    [root@localhost ~]# pip3 install SQLAlchemy


    SQLAlchemy 连接数据库:

    #!/usr/bin/env python3
    #-*- coding: utf-8 -*-
    
    from sqlalchemy import create_engine
    
    engine = create_engine('mysql+pymysql://root:123456@127.0.0.1/test', encoding='utf8', echo=True)
    print(engine)
    
    # create_engine():用于创建一个Engine实例,通过这个实例,SQL语句会被解释成Python类方法
    # 语法:mysql+pymysql://<user>:<password>@<host>[:<port>]/<dbname>
    # mysql:表示使用哪种数据库,其他数据库如 Oracle 、Redis 、MongoDB 等
    # pymysql:SQLAlchemy本身无法操作数据库,必须使用第三方模块进行操作
      python2 使用 mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname> 来操作数据库
      python3 使用 mysql+pymysql://<user>:<password>@<host>[:<port>]/<dbname> 来操作数据库
    # <user>:<password>@<host>[:<port>]/<dbname>:分别表示连接数据库的用户名 、密码 、主机以及连接到哪个库名
    # encoding='utf8':用于指定字符编码,可选参数
    # echo=True:会显示Python类对应的SQL语句,方便查看要执行什么SQL语句,可选参数


    SQLAlchemy 创建表结构:

    第一种方式:在自定义的类中继承 declarative_base 这个基类来映射数据表

    #!/usr/bin/env python3
    #-*- coding: utf-8 -*-
    
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, String, Integer
    
    engine = create_engine('mysql+pymysql://root:123456@127.0.0.1/test')    # 连接数据库
    Base = declarative_base()                                               # 生成 ORM 基类
    
    class User(Base):                                 # 继承基类
        __tablename__ = "user"                        # 定义表名
        userid = Column(Integer, primary_key=True)    # 定义 userid 字段,字段类型为数值类型,并设为主键
        username = Column(String(32))                 # 定义 username 字段,字段类型为字符串类型
        password = Column(String(64))                 # 定义 password 字段,字段类型为字符串类型
     
    if __name__ == '__main__':
        Base.metadata.create_all(engine)    # 创建表结构,父类Base会调用所有继承他的子类来创建表结构

    第二种方式:通过 MetaData 来存储表的元数据(也就是存储表结构),然后映射数据表

    #!/usr/bin/env python3
    #-*- coding: utf-8 -*-
    
    from sqlalchemy import create_engine, MetaData
    from sqlalchemy import Table, Column, Integer, String
    
    
    engine = create_engine('mysql+pymysql://root:123456@127.0.0.1/test')    # 连接数据库
    metadata = MetaData()                                                     # 存储表的元数据
    
    user = Table('user', metadata,                      # 定义表名
        Column('userid', Integer, primary_key=True),    # 定义 userid 字段,字段类型为数值类型,并设为主键
        Column('username', String(32)),                 # 定义 username 字段,字段类型为字符串类型
        Column('password', String(64)),                 # 定义 password 字段,字段类型为字符串类型
    )
    
    if __name__ == '__main__':
        metadata.create_all(engine)    # 创建表结构


    SQLAlchemy 增加表数据:

    Python 对 MySQL 数据库进行增删查改等操作需要先创建 session,session 用于创建程序与数据库之间的会话,所有对象的载入和保存都需要通过 session 对象

    #!/usr/bin/env python3
    #-*- coding: utf-8 -*-
    
    from sqlalchemy import create_engine
    from sqlalchemy import Column, String, Integer
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm import sessionmaker
    
    engine = create_engine('mysql+pymysql://root:123456@127.0.0.1/test')
    Base = declarative_base() 
    DBSession = sessionmaker(bind=engine)    # 创建与数据库的会话
    session = DBSession()                    # 实例化与数据库的会话
    
    class User(Base):
        __tablename__ = "user"
        userid = Column(Integer, primary_key=True)
        username = Column(String(32))
        password = Column(String(64))  
    
    user1 = User(userid=1, username='Tom',  password='123456')    # 生成user表要插入的一条数据
    user2 = User(userid=2, username='John', password='123456')    # 生成user表要插入的一条数据
    user3 = User(userid=3, username='Jeny', password='123456')    # 生成user表要插入的一条数据
    
    session.add(user1)                 # add()用于把user表要插入的一条数据添加到Session里
    session.add_all([user2, user3])    # add_all()用于把user表要插入的多条数据添加到Session里
    session.commit()                   # 最后提交会话,实现插入数据
    session.close()


    SQLAlchemy 查询表数据:

        

  • 相关阅读:
    痞子衡嵌入式:恩智浦MCU集成开发环境与开发工具教程
    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.4)- 串行NOR Flash下载算法(Keil MDK工具篇)
    《痞子衡嵌入式半月刊》 第 17 期
    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)
    《痞子衡嵌入式半月刊》 第 16 期
    痞子衡嵌入式:关于做技术的工作态度方面的几点建议
    痞子衡嵌入式:MCUXpresso IDE下添加C++源文件进SDK工程编译的方法
    痞子衡嵌入式:职场上有效地向师傅请教问题的几点建议
    痞子衡职场经验与见闻感悟分享
    痞子衡嵌入式:IAR在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致(J-Link/DAPLink)
  • 原文地址:https://www.cnblogs.com/pzk7788/p/10454437.html
Copyright © 2011-2022 走看看