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()#提交修改