from sqlalchemy.ext.declarative import declarative_base##父类
from sqlalchemy import Column###字段对象
from sqlalchemy import Text,String,Integer
from sqlalchemy import create_engine##创建引擎,连接sql
##引擎是对orm进行解析
from sqlalchemy.orm import sessionmaker
base=declarative_base()
##创建表
class table(base):
##表名
__datatable__='book'
##字段
book_name=Column(String,unique=True)
book_price=Column(Integer,default=0)
##创建引擎
engine=create_engine(
'mysql+pymysql://root:密码@127.0.0.1:3306/orm4?charset=utf8',
max_overflow=5,#超过连接池大小之外最多创建的连接
pool_size=5,连接池大小
pool_timeout=0,##线程池
pool_recycle=-1##多久对线程池进行回收
)
engine_bind=sessionmaker(bind=engine)#####连接引擎
session=engine_bind()##创建引擎对象
##下面是msql操作
####添加数据
add_obj=table(book_price=90,book_name='go')##tuple
session.add(add_obj)
#单条添加字段进去
###添加多条数据进去
add_objs=([
table(book_price=90, book_name='go'),
table(book_price=90, book_name='go'),
]
)
session.add_all(add_objs)
'''
单条数据是tuple>>(),多条是列表>>[]
'''
####查看数据
##1,查看全部数据,all()
data=session.query(table).all()##注意一下是看这个类名字,不是表名
print(data)
for i in data:
print(i.book_name)
##2.查看单条数据,filter()
##筛选出条件出来,匹配结果
data=session.query(table).filter(id=1)
print(data)
#select id,name as cname from users:##如果设置了别名的话
result=session.query(table.book_price,table.book_name.label('cname'))##要通过这样的方式来取值
for item in result:
print(item[0],item.id,item.cname)
##拿到这门下的所有的信息
a=session.query(table).filter_by(book_name='go').all()
####,加进来是通过and的符号加进来的,默认条件是and
session.query(table).filter(table.book_price>100).all()
#####3,between,在什么范围之内
session.query(table).filter(table.book_price.between(0,100),table.book_name=='go').all()
######4,in
session.query(table).filter(table.book_price.in_([100,30,90,20])).all()
session.query(table).filter(~table.book_price.in_([100,30,90,20])).all()##查询不在这里面的
##子查询,嵌套查询
session.query(table).filter(table.book_price.in_(session.query(table).filter(table.book_price==90))).all()
from sqlalchemy import and_,or_
session.query(table).filter(and_(table.book_price>100,table.book_name=='go')).all()##nad的条件,默认是and,也可以不加
session.query(table).filter(or_(table.book_price>100,table.book_name=='go')).all()##nad的条件,or的关系
##构造复杂的and和or的关系
session.query(table).filter(
or_(
table.book_name=='go',
and_(table.book_name=='go',table.book_price>100),
)
).all()
##上面传的是表达式,下面是参数
####filter_by
session.query(table).filter_by(book_name=100).all()
##注明一下,这个=的话是**kwargs来进行接收,里面原理也是filter来进行匹配
##通配符
session.query(table).filter(table.book_price.like('e%')).all()##通配符,进行匹配
session.query(table).filter(~table.book_price.like('e%')).all()##通配符,进行匹配
###切片
#通过索引来一个一个的取值
# session.query(table)[3:7]
session.query(table).order_by(table.book_price.desc(),table.book_price.asc()).all()#按照这个顺序,一个是从大到小,第二个是从小到大
##分组,func
from sqlalchemy.sql import func##分组
ret=session.query(table).group_by(table.book_price).all()
ret=session.query(table).group_by(table.book_price).all()
for row in ret:
print(item)
##最大值,最小值
ret=session.query(
# func.max(table.id),##取最大值,
# func.min(table.id)
table.id,
func.count(id),
).group_by(table.book_price).all()
##having,根据什么来进行分组
session.query(
table.book_price
).group_by(table.book_name).having(func.min(table.id)>2).all()
'''
select id,name frm userds
'''
# UNION:去重
#union 上下进行拼接
# select * from xxsub;
# UNION
# select id,name from basi2;
# qi拼接q2,进行组合
# q1.union(q2).all()
# UNION_ALL:不去重处理