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

  

posted @ 2016-04-22 14:36  ahaii  阅读(303)  评论(0编辑  收藏  举报