• SQLAlchemy学习-1.环境准备与基础使用


    前言

    SQLAlchemy采用简单的Python语言,提供高效和高性能的数据库访问,实现了完整的企业级持久模型。
    它提供了SQL工具包和ORM(对象关系映射)工具,类似于Django 自带的 ORM 框架操作数据库。
    官方文档地址https://docs.sqlalchemy.org/en/14/orm/quickstart.html

    环境准备

    基于python3.8环境,安装 sqlalchemy 和 pymysql

    pip3 install sqlalchemy==1.4.39
    pip3 install pymysql==1.0.2
    
    • 1
    • 2

    配置连接

    连接数据库,需要使用到一些配置信息,组合成满足以下条件的字符串:

    dialect+driver://username:password@host:port/database
    
    • 1

    相关配置参数说明

    配置参数说明
    dialect数据库,如:sqlite、mysql、oracle等
    driver数据库驱动,如前面安装的:pymysql
    username登录数据库用户名
    password登录数据库密码
    host数据库部署 IP 地址
    port端口
    database数据库库名

    拼接地址示例

    # 拼接配置dialect + driver://username:passwor@host:port/database
    DB_URI = 'mysql+pymysql://root:123456@localhost:3306/web'
    
    • 1
    • 2

    连接数据库示例

    查询 SQL 示例

    select * from yoyo_projectinfo WHERE project_name = 'yoyo';
    
    • 1

    执行结果

    先测试下配置的参数是否能连上数据库,写个简单的sql查询

    from sqlalchemy import create_engine
    
    
    # 拼接配置dialect + driver://username:passwor@host:port/database
    DB_URI = 'mysql+pymysql://root:123456@localhost:3306/web'
    
    engine = create_engine(DB_URI)  # 创建引擎
    conn = engine.connect()  # 创建连接
    result = conn.execute('select * from yoyo_projectinfo WHERE project_name = "yoyo";')  # 执行SQL
    print(result.fetchone())
    conn.close()    # 关闭连接
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    能看到执行结果,说明数据库连接成功。这是执行的硬核SQL语句,接下来就是讲通过ORM 操作数据库。

    创建 ORM 模型

    SQLAlchemy 是 Python 著名的 ORM 工具包。通过 ORM,开发者可以用面向对象的方式来操作数据库,不再需要编写 SQL 语句。
    在python代码中创建一个类,每个类对应了一个数据库中的一张表,类的数据属性对应了表中的字段名,这个类称为映射类。

    创建模型示例

    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import create_engine, Column, Integer, String
    
    # 拼接配置dialect + driver://username:passwor@host:port/database
    DB_URI = 'mysql+pymysql://root:123456@localhost:3306/web'
    Base = declarative_base()
    
    
    class Students(Base):
        __tablename__ = 'students'  # 数据库表名
    
        id = Column(Integer, primary_key=True)
        name = Column(String(20))
        fullname = Column(String(30))
        nickname = Column(String(30))
    
        def __repr__(self):
            return "" % (
                     self.name, self.fullname, self.nickname)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    相关参数说明:
    __tablename__:数据库表名
    Column: 数据表中的一列,内部定义了数据类型
    primary_key:主键
    String:定义字段是字符串类型,字符串类型需定义字符长度

    执行下面这2句,将模型映射到数据库中

    if __name__ == '__main__':
        engine = create_engine(DB_URI)
        Base.metadata.create_all(engine)  # 将模型映射到数据库中
    
    • 1
    • 2
    • 3

    执行完成后,在数据库中就可以看到students 表了

    新增数据

    模型创建完成后,接下来需要往数据库表里面添加数据,需要使用一个引擎的实例来创建一个 Session类的实例。

    from sqlalchemy.orm import sessionmaker
    from sqlalchemy import create_engine
    from xx.xx import Students
    
    engine = create_engine('mysql+pymysql://root:123456@localhost:3306/web')
    # 把当前的引擎绑定给这个会话
    Session = sessionmaker(bind=engine)
    # 实例化
    session = Session()
    
    # 创建一个student对象
    student_obj = Students(name='yoyo', fullname='yoyoketang', nickname='yy')
    session.add(student_obj)  # 添加到session
    session.commit()  # 提交到数据库
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    执行完成后,会看到数据库里面有新增的数据了

    批量创建数据使用add_all

    session.add_all([
        Students(name='yoyo1', fullname='yoyoketang1', nickname='yy1'),
        Students(name='yoyo2', fullname='yoyoketang2', nickname='yy2')
    ])
    session.commit()
    
    • 1
    • 2
    • 3
    • 4
    • 5

  • 相关阅读:
    通达信l2行情接口怎么用?
    java计算机毕业设计网上花店源码+系统+mysql数据库+LW文档+部署文件
    [附源码]java毕业设计校园博客系统
    anaconda、python卸载后重装以及anaconda--443
    BeanShell 如何加密加签?
    Redis布隆过滤器原理
    拼多多API接口(附上我的可用API)
    牛客网论坛最具争议的 Java 面试成神笔记,GitHub 已下载量已过百万
    计算机网络第四层 运输层
    【Python面向对象进阶②】——‘__slots__‘限制类动态增加属性
  • 原文地址:https://blog.csdn.net/qq_27371025/article/details/125855932