zoukankan      html  css  js  c++  java
  • python经典orm框架sqlalchemy

    在一般的项目中,简单的访问数据库用pymysql就可以了,手写一些SQL也没有什么问题,但是对于一个大型系统,可能面对多次的数据库增删改查操作,如果都用手写SQL实现,代码会显得很难看,开发效率也比较低,这个时候就推荐使用orm框架了。

    python的orm框架有很多,我最早接触的是django的内嵌orm,用起来的确很不错,但目前并没有独立出来。

    独立的框架里面,比较经典的就是本文的主角sqlalchemy了。

    from sqlalchemy import Column, String, create_engine, Integer
    from sqlalchemy.orm import sessionmaker
    from sqlalchemy.ext.declarative import declarative_base
    
    # 创建对象的基类:
    Base = declarative_base()
    # 初始化数据库连接:
    engine = create_engine('mysql+pymysql://root:******@localhost:3306/scheduler')
    
    
    # 定义User对象:
    class User(Base):
        # 表的名字:
        __tablename__ = 'user'
    
        # 表的结构:
        id = Column(String(20), primary_key=True)
        name = Column(String(20))
        age = Column(Integer)
    
        def __repr__(self):
            return 'User(id={id},name={name},age={age})'.format(id=self.id, name=self.name, age=self.age)
    
    
    # 创建所有定义的表到数据库中
    def init_db():
        Base.metadata.create_all(engine)
    
    
    # 从数据库中删除所有定义的表
    def drop_db():
        Base.metadata.drop_all(engine)
    
    
    if __name__ == '__main__':
        drop_db()
        init_db()
        # 创建DBSession类型:
        DBSession = sessionmaker(bind=engine)
        # 创建session对象:
        session = DBSession()
        # 创建新User对象:
        new_user = User(id='7', name='ali', age=11)
        user1 = User(id='8', name='mary', age=12)
        user2 = User(id=1, name='bob', age=12)
        # 插入数据
        session.add(new_user)
        session.add_all([user2, user1])
        # 提交即保存到数据库:
        session.commit()
        # 更新数据
        session.query(User).filter(User.name == 'ali').update({'name': 'da'})
        # 删除数据
        session.query(User).filter(User.id == 1).delete()
        session.commit()
        # 查询数据
        ret = session.query(User).all()
        print(ret)
        session.close()

    sqlalchemy 的功能当然不止于此,随着后面的学习,我会继续补充到这里。

    参考:

    https://www.liaoxuefeng.com/wiki/1016959663602400/1017803857459008

  • 相关阅读:
    测试用例设计白皮书--测试用例设计综合策略
    流程控制
    与用户交互,格式化输出,基本运算符
    jupyter的安装
    python程序运行的方式、变量、注释、内存管理、数据类型
    博客园 文章爬取(乱写的,有的爬不下来)
    Python 九九乘法表打印
    Python 爬歌曲
    redis快速入门
    UDPsocket编程
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/13614450.html
Copyright © 2011-2022 走看看