美文网首页
SQLAlchemy ORM

SQLAlchemy ORM

作者: python_菜鸟 | 来源:发表于2020-08-21 10:23 被阅读0次

    SQLAlchemy简介

    SQLAlchemy是Python SQL工具箱和对象关系映射器,它为应用程序开发人员提供了SQL的全部功能和灵活性。SQLAlchemy最著名的是对象关系映射器(ORM),它是提供数据映射器模式的可选组件,在该模式中,可以以开放式,多种方式将类映射到数据库-允许对象模型和数据库模式以从一开始就完全脱钩。

    • 安装(SQLAlchemy1.4版本)

    >>> import sqlalchemy
    >>> sqlalchemy.__version__ 
    1.4.0
    
    • 连接数据库

    from sqlalchemy import create_engine
    engine = create_engine('sqlite:///:memory:', echo=True)
    
    • 声明映射(声明性基类declarative_base)

    from sqlalchemy.ext.declarative import declarative_base
    
    Base = declarative_base()
    
    • 映射对应表

    class User(Base):
      # 对应数据库关联表
       __tablename__ = 'users'
       # 字段, 数据类型,[主键自增]
       id = Column(Integer, primary_key=True)
       name = Column(String(50))
       fullname = Column(String(50))
       nickname = Column(String(50))
        # 以便我们的示例显示格式良好的 User 对象(可选择性显示)
       def __repr__(self):
           return "<User(name='%s', fullname='%s', nickname='%s')>" % (
                                self.name, self.fullname, self.nickname)
    
    • 通过映射声明类的table属性查看关于映射表的信息

    >>> User.__table__ 
    Table('users', MetaData(bind=None),
                Column('id', Integer(), table=<users>, primary_key=True, nullable=False),
                Column('name', String(50), table=<users>),
                Column('fullname', String(50), table=<users>),
                Column('nickname', String(50), table=<users>), schema=None)
    # MetaData(bind=None)说明我们这个users表在数据库不存在,还没有创建
    
    • 一句话创建表结构

    >>> Base.metadata.create_all(engine)
    SELECT ...
    PRAGMA table_info("users")
    ()
    CREATE TABLE users (
        id INTEGER NOT NULL, name VARCHAR,
        fullname VARCHAR,
        nickname VARCHAR,
        PRIMARY KEY (id)
    )
    ()
    COMMIT
    
    • 检查我们创建的映射是否正确

    >>> ed_user = User(name='ed', fullname='Ed Jones', nickname='edsnickname')
    >>> ed_user.name
    'ed'
    >>> ed_user.nickname
    'edsnickname'
    >>> str(ed_user.id)
    'None'
    
    • 创建会话(session)

    # 方法一
    from sqlalchemy.orm import sessionmaker
    Session = sessionmaker(bind=engine)
    
    # 方法二(如果您的应用程序还没有 Engine 定义模块级对象时)
    from sqlalchemy.orm import sessionmaker
    Session = sessionmaker()
    Session.configure(bind=engine)
    
    #当使用时实例化对象调用
    session = Session()
    
    • 后续:

    利用 SQLAlchemy-ORM 进行数据的增删改查
    更多知识请参考SQLAlchemy 1.4文档

    相关文章

      网友评论

          本文标题:SQLAlchemy ORM

          本文链接:https://www.haomeiwen.com/subject/eiayjktx.html