本地测试了下sqlalchemy,使用起来比较简单,直接来看我的代码吧,花了半天实践整理的,数据就是用的我的博客的
#!/usr/bin/python3 #coding:utf-8 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer,String,and_,or_,create_engine from sqlalchemy.orm import sessionmaker #初始化基类 Base = declarative_base() #定义表对象并集成基类 class Category(Base): __tablename__ = 'zbp_category' cate_ID = Column(Integer, primary_key=True) cate_Name = Column(String(50)) cate_Order = Column(Integer) cate_Count = Column(Integer) cate_Alias = Column(String(255)) cate_Intro = Column(String) cate_RootID = Column(Integer) cate_ParentID = Column(Integer) cate_Template = Column(String(50)) cate_LogTemplate = Column(String(50)) cate_Meta = Column(String) #初始化数据库连接: engine = create_engine("mysql+pymysql://root:root@localhost:3306/sulao") #创建DBSession类型: DBSession = sessionmaker(bind=engine) #创建session对象: session = DBSession() #查找所有 ret = session.query(Category).all() for i in ret: print(i.cate_Name) #查找指定条件返回列表,使用filter_by时条件只能是=,有其他逻辑的条件请使用filter ret1 = session.query(Category).filter_by(cate_ID=5).all() for i in ret1: print(i.cate_Name) #指定查找返回对象,使用filter_by时条件只能是=,有其他逻辑的条件请使用filter ret2 = session.query(Category).filter_by(cate_ID=5).first() print(ret2.cate_Name) #多个条件查找,使用filter过滤参数== ret3 = session.query(Category).filter(Category.cate_ID>0, Category.cate_RootID==0).all() #通配符%,取反请使用条件~作为参数前缀,例:~Category.cate_Name.like('%sql%') ret4 = session.query(Category).filter(Category.cate_Name.like('%sql%')).all() #排序 ret5 = session.query(Category).filter(Category.cate_ID>5).order_by(Category.cate_ID.asc()).all() #or和and,需要导入模块 ret6 = session.query(Category).filter(or_(Category.cate_ID>5, Category.cate_Name.like('%sql%'))).all() #查询指定行数据,用切片的方式 ret7 = session.query(Category)[:6] #双表联查 ret8 = session.query(Category, Post).filter(Category.cate_ID==Post.log_CateID).all() #组合 t1 = session.query(Category).filter(Category.cate_ID>5) t2 = session.query(Post).filter(Post.log_CateID>100) ret9 = t1.union(t2).all() #以上是查询的,下面讲讲新增,删除和修改 #增加一条数据 obj = Category(cate_Name='新的笔记',cate_Order=0, cate_Count=0, cate_Alias='newbook', cate_Intro='', cate_RootID=0, cate_ParentID=0, cate_Template='', cate_LogTemplate='', cate_Meta='') session.add(obj) session.commit() #增加多条数据 session.add_all([ Category(cate_Name='新的笔记2',cate_Order=0, cate_Count=0, cate_Alias='newbook', cate_Intro='', cate_RootID=0, cate_ParentID=0, cate_Template='', cate_LogTemplate='', cate_Meta=''), Category(cate_Name='新的笔记3',cate_Order=0, cate_Count=0, cate_Alias='newbook', cate_Intro='', cate_RootID=0, cate_ParentID=0, cate_Template='', cate_LogTemplate='', cate_Meta=''), Category(cate_Name='新的笔记4',cate_Order=0, cate_Count=0, cate_Alias='newbook', cate_Intro='', cate_RootID=0, cate_ParentID=0, cate_Template='', cate_LogTemplate='', cate_Meta='') ]) session.commit() #删除数据 session.query(Category).filter(Category.cate_ID>13).delete() session.commit() #修改数据 session.query(Category).filter(Category.cate_ID==13).update({"cate_Name":"测试笔记"}) session.commit() #字段自增,常用浏览数等更新 session.query(Category).filter(Category.cate_ID==13).update({"cate_Order": Category.cate_Order+1}) session.commit() #字段拼接新字符串 session.query(Category).filter(Category.cate_ID==13).update({"cate_Name": Category.cate_Name + "测试"}, synchronize_session=False) session.commit()
以上需要注意的是filter和filter_by使用的场景,当使用多个条件的时候使用filter函数,参数需要对象+成员,条件中要等于要使用==,当使用filter_by的时候一般都是单条件查询,条件中等号使用=就行了。
all()查询返回的是一个list,list中包含对象列表,条用方式是,取列表索引值的成员
obj[index].member #循环 for i in list: print(i.member)
使用first()查询直接返回对象,直接
obj.member即可获取到对象成员的值