zoukankan      html  css  js  c++  java
  • 【SQLAlchemy】01-初识SQLAlchemy

    好风凭借力,送我上青云。

    介绍

    SQLAlchemy对象关系映射器提供了一种将用户定义的Python类与数据库表以及这些类(对象)的实例与相应表中的行关联起来的方法

    1. 安装

    pip install sqlalchemy -i https://pypi.doubanio.com/simple
    

    2. 连接

    from sqlalchemy import create_engine
    
    # 数据库基本信息
    HOSTNAME = '127.0.0.1'
    PORT = '3306'
    DATABASE = 'flask'
    USERNAME = 'root'
    PASSWORD = 'root'
    DB_URI = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8"
    
    #  连接数据库,echo:表示日志
    engine = create_engine(DB_URI, echo=False)
    
    # 判断是否连接成功
    conn = engine.connect()
    print(conn.execute("select 1").fetchone())
    

    3. 映射

    在这个ORM模型中创建一些属性,来跟表中的字段进行一一映射。这些属性必须是sqlalchemy给我们提供好的数据类型。

    #  声明映射,创建一个ORM基类。
    Base = declarative_base(engine)
    
    #  映射类
    class User(Base):
        # 指定这个模型映射到数据库中的表名
        __tablename__ = 'user'
    
        # primary_key:主键
        # autoincrement:自增长
        id = Column(Integer, primary_key=True, autoincrement=True)
        name = Column(String(50))
        fullname = Column(String(length=50))
        nickname = Column(String(length=50))
    
        def __repr__(self):
            return "<User(name='%s',fullname='%s',nickname='%s'>" % (self.name, self.fullname, self.nickname)
    
    # 来将模型映射到数据库中,相当于执行create table
    Base.metadata.create_all()
    

    4. 会话

    会话就是在连接到当前数据库,可以对数据库进行CRUD操作

    # 创建会话
    from sqlalchemy.orm import sessionmaker
    
    Session = sessionmaker(bind=engine)
    
    # 所有和数据库的ORM操作都必须通过一个叫做`session`的会话对象来实现
    session = Session()
    

    5. CRUD操作

    5.1 增

    • 单个对象添加
    # 添加对象
    user = User(name='ydy', fullname='ydongy', nickname='yaodongyang')
    
    # 把对象添加到会话中
    session.add(user)
    
    # 对session中的对象做commit操作
    session.commit()
    
    • 多个对象一起添加
    #  一次添加多条
    user1 = User(name='zs', fullname='zhangsan', nickname='张三')
    user2 = User(name='ls', fullname='lisi', nickname='李四')
    
    # 刷新到当前事务
    session.add_all([user1, user2])
    # 提交
    session.commit()
    

    5.2 查

    • 查找所有
    users = session.query(User).all()
    # 返回对象列表
    # print(users)
    
    • filter_by查询
    u = session.query(User).filter_by(name='ydy').all()
    print(u)
    
    • filter查询
    u = session.query(User).filter(User.name == 'ydy').all()
    print(u)
    
    • get查询
    # 使用get方法查找数据是根据id来查找的
    u = session.query(User).get(3)
    print(u)
    
    • first():返回查询集的第一条数据
    • all():返回符合条件的所以查询集

    当在查询语句的末尾不添加all()first()的时候,仅仅只是query返回的是需要执行的sql语句

    5.3 改

    u = session.query(User).first()
    u.name = 'aaa'
    
    # 提交
    session.commit()
    
    # 回滚
    session.rollback()
    

    5.4 删

    u = session.query(User).first()
    session.delete(u)
    session.commit()
    
  • 相关阅读:
    阿里巴巴的字体图标库不错
    SQL语句一次INSERT多条记录的方法
    Oracle中改变表的Owner和tablespace
    QQ在线状态的使用
    gtest
    Git
    gRPC安装的小问题
    蓝桥杯试题 基础练习 查找整数
    Product Backlog
    本周工作量统计
  • 原文地址:https://www.cnblogs.com/ydongy/p/13157879.html
Copyright © 2011-2022 走看看