第一步:创建engine对象 连接数据库
engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/db001?charset=utf8",max_overflow=0, # 超过连接池大小外最多创建的连接pool_size=5, # 连接池大小pool_timeout=30, # 池中没有线程最多等待的时间,否则报错pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置)
)
操作表中得数据
第二步:得到一个session对象---》不是flask的session---》会话---》链接
Session = sessionmaker(bind=engine)# 把引擎传入
session = Session() # 得到session对象
利用session去操作表
1.创建一条数据
user=User(name='lqz',email='33@qq.com')
# # 保存到数据库
session.add(user)
session.commit() # 提交事务
session.close() #关闭会话
创建数据时,一定要session.commit()提交事务,session.add(user) add()是创建一条数据,若要一次创建多条数据需要用到add_all()
hobby = Hobby()
hobby1 = Hobby(caption='足球')
hobby2 = Hobby(caption='乒乓球')session.add_all([hobby,hobby1,hobby2])
add_all()里面用列表将添加的对象放入
2.查数据
filter传的是表达式,filter_by传的是参数
all() 出来的是列表---》不是qs对象,没有这个东西
拿单条 .first()
select * from User where User.id>2 limit 1;
res=session.query(User).filter(User.id>2).first()
res=session.query(User).filter(User.name=='lqz').all()
res=session.query(User).filter_by(id=3).all()
res=session.query(User).filter_by(name='lqz').all()
3.删除数据
delete * from User where id >6;
res = session.query(User).filter(User.id >= 6).delete()
print(res) # 影响的行数不能删除,没有方法
user=session.query(User).filter(User.id == 5).first()
user.delete() # 它没有单独删对象的
4.修改
# res=session.query(User).filter(User.id > 0).update({"name" : "lqz"})
#类似于django的F查询
session.query(User).filter(User.id > 0).update({User.name: User.name + "099"}, synchronize_session=False) # 字符串相加
session.query(User).filter(User.id > 0).update({"age": User.age + 1}, synchronize_session="evaluate") # 数字相加
# 查到单个对象,修改属性--》add增加进去---》修改? add 只要有id,就是修改
res=session.query(User).filter(User.id == 1).first()
# print(res)
res.name='yyyy'
session.add(res)