zoukankan      html  css  js  c++  java
  • Python之SQLAlchemy

    SQLAlchemy是干什么用的?

    SQLAlchemy是Python操作数据库的一个框架,它可以将对象转换成SQL,然后使用数据库API执行SQL,即ORM。简而言之,就是将数据库的每个表映射为编程语言中的Class(类)。

    安装

    easy_install SQLAlchemy

     创建一个表:

    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    from  sqlalchemy.orm import sessionmaker
    
    Base = declarative_base() #生成一个SqlORM 基类
    
    engine = create_engine("mysql+mysqldb://root:123456@localhost:3306/test",echo=True)#连接test库,echo=True显示操作过程,可为False
    
    class Host(Base):
        __tablename__ = 'hosts'#表名
        id = Column(Integer,primary_key=True,autoincrement=True)#表字段
        hostname = Column(String(64),unique=True,nullable=False)
        ip_addr = Column(String(128),unique=True,nullable=False)
        port = Column(Integer,default=22)
    
    Base.metadata.create_all(engine)

    插入数据:

    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    from  sqlalchemy.orm import sessionmaker
    
    Base = declarative_base() #生成一个SqlORM 基类
    
    engine = create_engine("mysql+mysqldb://root:123456@localhost:3306/test",echo=True)#连接test库,echo=True显示操作过程,可为False
    
    class Host(Base):
        __tablename__ = 'hosts'#表名
        id = Column(Integer,primary_key=True,autoincrement=True)#表字段
        hostname = Column(String(64),unique=True,nullable=False)
        ip_addr = Column(String(128),unique=True,nullable=False)
        port = Column(Integer,default=22)
    
    Base.metadata.create_all(engine)
    
    if __name__ == '__main__':
        SessionCls = sessionmaker(bind=engine) #创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
        session = SessionCls()#生成session示例,用于操作数据库
        h1 = Host(hostname='localhost',ip_addr='127.0.0.1')
        h2 = Host(hostname='ubuntu',ip_addr='192.168.2.243',port=20000)
        h3 = Host(hostname='windows',ip_addr='192.168.2.244',port=18900)
        # session.add(h1)#可以分条插入
        # session.add(h2)
        # session.add(h3)
        session.add_all([h1,h2,h3])#批量插入
        h2.hostname = 'ubuntu_test' #只要没提交,此时修改也没问题
        session.commit()#提交修改

    修改数据:

    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    from  sqlalchemy.orm import sessionmaker
    
    Base = declarative_base() #生成一个SqlORM 基类
    
    
    engine = create_engine("mysql+mysqldb://root:123456@localhost:3306/test",echo=True)#连接test库,echo=True显示操作过程,可为False
    
    
    # class Host(Base):
    #     __tablename__ = 'hosts'#表名
    #     id = Column(Integer,primary_key=True,autoincrement=True)#表字段
    #     hostname = Column(String(64),unique=True,nullable=False)
    #     ip_addr = Column(String(128),unique=True,nullable=False)
    #     port = Column(Integer,default=22)
    # 
    # Base.metadata.create_all(engine)
    # 
    # if __name__ == '__main__':
    #     SessionCls = sessionmaker(bind=engine) #创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
    #     session = SessionCls()#生成session示例,用于操作数据库
    #     h1 = Host(hostname='localhost',ip_addr='127.0.0.1')
    #     h2 = Host(hostname='ubuntu',ip_addr='192.168.2.243',port=20000)
    #     h3 = Host(hostname='windows',ip_addr='192.168.2.244',port=18900)
    #     # session.add(h1)#可以分条插入
    #     # session.add(h2)
    #     # session.add(h3)
    #     session.add_all([h1,h2,h3])#批量插入
    #     h2.hostname = 'ubuntu_test' #只要没提交,此时修改也没问题
        obj = session.query(Host).filter(Host.hostname=='localhost').first()#先查询
        obj.hostname = 'centos'#修改值
    
        session.commit()#提交修改

    删除:

    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    from  sqlalchemy.orm import sessionmaker
    
    Base = declarative_base() #生成一个SqlORM 基类
    
    
    engine = create_engine("mysql+mysqldb://root:123456@localhost:3306/test",echo=True)#连接test库,echo=True显示操作过程,可为False
    
    
    # class Host(Base):
    #     __tablename__ = 'hosts'#表名
    #     id = Column(Integer,primary_key=True,autoincrement=True)#表字段
    #     hostname = Column(String(64),unique=True,nullable=False)
    #     ip_addr = Column(String(128),unique=True,nullable=False)
    #     port = Column(Integer,default=22)
    # 
    # Base.metadata.create_all(engine)
    # 
    # if __name__ == '__main__':
    #     SessionCls = sessionmaker(bind=engine) #创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
    #     session = SessionCls()#生成session示例,用于操作数据库
    #     h1 = Host(hostname='localhost',ip_addr='127.0.0.1')
    #     h2 = Host(hostname='ubuntu',ip_addr='192.168.2.243',port=20000)
    #     h3 = Host(hostname='windows',ip_addr='192.168.2.244',port=18900)
    #     # session.add(h1)#可以分条插入
    #     # session.add(h2)
    #     # session.add(h3)
    #     session.add_all([h1,h2,h3])#批量插入
    #     h2.hostname = 'ubuntu_test' #只要没提交,此时修改也没问题
        obj = session.query(Host).filter(Host.hostname=='localhost').first()#先查询
    #    obj.hostname = 'centos'#修改值
        session.delete(obj)#删除
        session.commit()#提交修改

      

  • 相关阅读:
    JSON初试
    for ...in 、for each ...in、 for...of(https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of)
    WPF MVVM 模式下的弹窗
    『简易日志』NuGet 日志包 SimpleLogger
    WPF 让一组 Button 实现 RadioButton 的当前样式效果
    IIS 错误解决:当前标识没有对 Temporary ASP.NET Files 的写访问权限
    [读书笔记] 《大话设计模式》
    WPF 原生绑定和命令功能使用指南
    ASP.NET Core MVC 网站学习笔记
    在香蕉派的树莓派系统上配置 Syncthing 自启动
  • 原文地址:https://www.cnblogs.com/ahaii/p/5421218.html
Copyright © 2011-2022 走看看