文章目录
- 1 增
- 2 删
- 3 改
- 4 基础查询
- 4.1 基础查询汇总
- 4.2 限制查询
- 4.3 计数
- 4.4 去重
- 4.5 排序
- 4.6 模糊查询
- 4.7 分组查询
- 4.8 聚合函数
- 5 多表查询
- 5.1 内连接
- 5.2 左外连接
- 5.3 复杂查询
- 5.4 三表连接
- 5.5 利用SQLAlchemy执行原生SQL
- 6 原生语句查询 返回json格式
- 3 统计数量
1 增
Customer为表名
try:
username = '123456'
customerInfo = Customer(username=username)
db.add(customerInfo) # 添加数据
db.commit() # 提交即保存到数据库
except Exception as e:
db.rollback()
print(e)
2 删
# 删除
@route('/professionDeleteType/<num>')
def professionDeleteType(db,num):
print(num)
try:
print('--------删除--------------')
print(num)
TypeNameInfo = db.query(Profession).filter(Profession.pid==int(num)).delete()
db.commit() # 提交即保存到数据库
# db.close() # 关闭会话
except Exception as e:
print(e)
return redirect('/profession')
3 改
Users表
try:
username = db.query(Users).filter_by(username=username).first()
username.nickname = Hnickname
username.img_url = Himg_url
db.commit()
except:
db.rollback()
print(e)
return json.dumps({'data': 0, 'info': '内部错误,请刷新!!!'})
4 基础查询
4.1 基础查询汇总
# select * from users;
result = db.query(Users).all()
# select uid, username from users;
result = db.query(Users.uid, Users.username).all()
# select * from users where uid=17 and username='666';
result = db.query(Users).filter_by(uid=17, username='666').all()
# select * from users where uid>=16 or username='666';
result = db.query(Users).filter(or_(
Users.uid >= 16,
Users.username == '666'
)).all()
4.2 限制查询
# 查询前3行
result = db.query(Users).limit(3).all()
# select * from users limit 3,5;
result = db.query(Users).limit(3).offset(3).all()
limit
:查询多少条
offset
:偏移量 -> 3 表示从第4条开始
4.3 计数
select count(*) from users where ...
filter
:== >= < > != != in not
count = db.query(Users).filter(Users.uid > 16).count()
print(count)
4.4 去重
select distinct(openid) from users;
result = db.query(Users.openid).distinct(Users.openid).all()
print(result)
for row in result:
print(row.openid)
4.5 排序
select * from users order by uid desc;
result = db.query(Users).order_by(Users.uid.desc()).all()
4.6 模糊查询
select * from users where username like '%929%';
result = db.query(Users).filter(Users.username.like('%929%')).all()
4.7 分组查询
select * from users group by isAdmin;
result = db.query(Users).group_by(Users.openid).all()
result = db.query(Users).group_by(Users.openid).having(Users.uid > 2).all()
4.8 聚合函数
min
、max
、avg
、sum
select sum(u_dealNum) from users;
result = db.query(func.sum(Users.u_dealNum)).first()
print(result)
5 多表查询
5.1 内连接
查询发表过文章的 用户信息+文章信息
select a_title from users, article where users.uid=article.uid and article.a_id=1;
select a_title from article inner join users on users.uid=article.uid where article.a_id=1;
# 多表查询时,返回的结果集不再是单纯的[Model, Model]数据结构,而是每张表的结果有独立的对象来维护
result = db.query(Article, Users).join(Users, Article.uid == Users.uid).filter(Article.a_id == 1).all()
print(result)
for article, users in result:
print(article.uid, article.a_title, users.username)
result = db.query(Article, Users.username).join(Users, Article.uid == Users.uid).filter(Article.a_id == 1).all()
print(result)
for article, username in result:
print(article.uid, article.a_title, username)
5.2 左外连接
查询所有用户 写的文章阅读量
select nickname,a_title,sum(a_pageviews) as total from users left join article on users.uid=article.uid group by users.uid having total>0;
result = db.query(Users.uid, Users.nickname, func.sum(Article.a_pageviews)).outerjoin(Article, Users.uid == Article.uid).group_by(Users.uid).all()
5.3 复杂查询
and和or混用
: username like 'charles' or uid>1 and nickname='导演'
result = db.query(Users).filter(
or_(Users.username.like('charles'), and_(Users.uid > 1, Users.nickname == "导演"))).all()
result = db.query(Users).filter(Users.username.like('charles'), or_(Users.uid > 1, Users.nickname == "导演")).all()
print(result)
for row in result:
print(row.uid, row.username)
5.4 三表连接
result = db.query(Article, Users).join(Users, Article.uid == Users.uid) \
.join(Label, Article.l_id == Label.l_id).all()
5.5 利用SQLAlchemy执行原生SQL
result = db.execute("select * from users").fetchall()
print(result)
6 原生语句查询 返回json格式
try:
sql = ''
Info = db.execute(sql)
print(Info)
except Exception as e:
db.rollback()
print(e)
results = []
for i in searchs:
bid = i['bid'] # 索引
isbn = i['isbn'] # isbn
print(bid)
print(isbn)
result = {
"bid": bid,
"isbn": isbn,
}
print(result)
results.append(result)
data = {
"status": '1',
"results": results
}
return json.dumps(data)
3 统计数量
from sqlalchemy import func
older_num = db.query(func.count(Order_history.seller)).filter_by(seller=uname).scalar()
Sqlchemy查询结果转jsonMySQL 查询统计 日期查询