最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python之ORM框架SQLAlchemy

    正文概述    2020-02-07   228

    Python之ORM框架SQLAlchemy

    一、SQLAlchemy简介

    SQLAlchemy是Python SQL工具包和对象关系映射器,是python中最著名的ORM(Object Relationship Mapping)框架,它简化了应用程序开发人员在原生SQL上的操作,使开发人员将主要精力都放在程序逻辑上,从而提高开发效率。它提供了一整套著名的企业级持久性模式,设计用于高效和高性能的数据库访问。

    使用ORM操作数据库:

    优势 :代码易读,隐藏底层原生SQL语句,提高了开发效率。

    劣势 :执行效率低 ,将方法转换为原生SQL后 原生SQL不一定是最优的。

    环境:

    Windows 7  x64   python 3.7.1  SQLAlchemy 1.3.5   pymysql 0.9.3    mysqld  5.6.43

    关于如何安装上述环境,这里不做演示,相信大家能搜到这篇文章,想必这种小问题不在话下。

    二、简单的操作

    1、准备数据库sql_demo

    mysql> create database sql_demo;

    2、在sql_demo中创建表

    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    from sqlalchemy import create_engine
    Base = declarative_base()  # 导出官方基础类
    class SQLDemo(Base):
        __tablename__ = 'SqlDemo'  # 表名
        # 创建字段
        id = Column(Integer,primary_key=True,autoincrement=True)
        name = Column(String(32))
    # 创建数据库引擎
    engine = create_engine('mysql+pymysql://数据库用户:数据库密码@127.0.0.1:3306/数据库名?charset=utf8')
    # 创建表
    Base.metadata.create_all(engine)

    运行上面的代码后会在数据库sql_demo中创建一个名为sqldemo的表。

    Python之ORM框架SQLAlchemy

    3、向表中添加数据。

    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    Base = declarative_base()  # 导出官方基础类
    class SQLDemo(Base):
        __tablename__ = 'SqlDemo'  # 表名
        # 创建字段
        id = Column(Integer,primary_key=True,autoincrement=True)
        name = Column(String(32))
    # 创建数据库引擎
    engine = create_engine('mysql+pymysql://root:123@127.0.0.1:3306/sql_demo?charset=utf8')
    # 创建表
    # Base.metadata.create_all(engine)
    # 向表中添加数据
    obj = SQLDemo(name='小明')
    # 创建会话
    obj_session = sessionmaker(engine)
    # 打开会话
    db_session = obj_session()
    # 向表中添加数据,此时数据保存在内存中
    db_session.add(obj)
    # 提交数据,将数据保存到数据库中
    db_session.commit()
    # 关闭会话
    db_session.close()

    相关推荐:《Python视频教程》

    3.1向表中添加多条数据。

     向表中添加多条数据

     添加后的数据如下:

    Python之ORM框架SQLAlchemy

    4、查询表中数据

    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    Base = declarative_base()  # 导出官方基础类
    class SQLDemo(Base):
        __tablename__ = 'SqlDemo'  # 表名
        # 创建字段
        id = Column(Integer,primary_key=True,autoincrement=True)
        name = Column(String(32))
    # # 创建数据库引擎
    engine = create_engine('mysql+pymysql://root:123@127.0.0.1:3306/sql_demo?charset=utf8')
    # 创建会话
    obj_session = sessionmaker(engine)
    # 打开会话
    db_session = obj_session()
    # 查询表中所有数据
    all_list = db_session.query(SQLDemo).all()
    for obj in all_list:
        print(obj.id,obj.name)
    # 提交数据,将数据保存到数据库中
    db_session.commit()
    # 关闭会话
    db_session.close()

     最终打印结果如下:

    Python之ORM框架SQLAlchemy

    4.1使用filter过滤查询条件

    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    Base = declarative_base()  # 导出官方基础类
    class SQLDemo(Base):
        __tablename__ = 'SqlDemo'  # 表名
        # 创建字段
        id = Column(Integer,primary_key=True,autoincrement=True)
        name = Column(String(32))
    # # 创建数据库引擎
    engine = create_engine('mysql+pymysql://root:123@127.0.0.1:3306/sql_demo?charset=utf8')
    # 创建会话
    obj_session = sessionmaker(engine)
    # 打开会话
    db_session = obj_session()
    # 使用filter过滤查询条件
    all_list = db_session.query(SQLDemo).filter(SQLDemo.name=='小明')
    for obj in all_list:
        print(obj.id,obj.name)
    # 提交数据,将数据保存到数据库中
    db_session.commit()
    # 关闭会话

    Python之ORM框架SQLAlchemy

    5、修改数据

    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    Base = declarative_base()  # 导出官方基础类
    class SQLDemo(Base):
        __tablename__ = 'SqlDemo'  # 表名
        # 创建字段
        id = Column(Integer,primary_key=True,autoincrement=True)
        name = Column(String(32))
    # 创建数据库引擎
    engine = create_engine('mysql+pymysql://root:123@127.0.0.1:3306/sql_demo?charset=utf8')
    # 创建会话
    obj_session = sessionmaker(engine)
    # 打开会话
    db_session = obj_session()
    # 更改id是2的name为娃哈哈
    all_list = db_session.query(SQLDemo).filter(SQLDemo.id==2).update({'name':'娃哈哈'})
    # 提交数据,将数据保存到数据库中
    db_session.commit()
    # 关闭会话
    db_session.close()

    6、删除数据

    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    Base = declarative_base()  # 导出官方基础类
    class SQLDemo(Base):
        __tablename__ = 'SqlDemo'  # 表名
        # 创建字段
        id = Column(Integer,primary_key=True,autoincrement=True)
        name = Column(String(32))
    # # 创建数据库引擎
    engine = create_engine('mysql+pymysql://root:123@127.0.0.1:3306/sql_demo?charset=utf8')
    # 创建会话
    obj_session = sessionmaker(engine)
    # 打开会话
    db_session = obj_session()
    # 删除id是2的行
    all_list = db_session.query(SQLDemo).filter(SQLDemo.id==2).delete()
    # 提交数据,将数据保存到数据库中
    db_session.commit()
    # 关闭会话
    db_session.close()

    起源地下载网 » Python之ORM框架SQLAlchemy

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元