801

Flask操作MYsql–SQLAlchemy

1、基本增删改查(前提是已有数据模型:例如:Users)

增,查,改 ,删:

#增
>>> from app.auth.models import Users
>>> u = Users(name='MuMu',jobnum='0001')
>>> db.session.add(u)
>>> db.session.commit()
#查
>>> u = Users.query.filter_by(name='MuMu').first()
>>> print(u.name)
#改
>>> u1 = db.session.query(Users).filter(Users.name=='MuMu').first()
>>> u1.name='mumu'
>>> db.session.commit()#不是新增数据无需add操作
#删
>>> u2 = Users.query.get('0001')#工号为主键
>>> db.session.delete(u2)
>>> db.session.commit()

2、其他用法

>>> from app.auth.models import Users
>>> from sqlalchemy import or_
>>> from sqlalchemy.sql import func
#and(与)条件查询,label是给字段重命名
>>> u = db.session.query(Users.adress.label('ads')).filter.(Users.name=='MuMu',Users.jobnum=='0001').all()
#or_(或)条件查询
>>> u2 = db.session.query(Users).filter(or_(Users.name=='mumu',Users.name=='MuMu')).all()
# between,查询用户id为1-3的所有用户
>>> u3 = db.session.query(Users).filter(Users.id.between(1, 3)).all()
# and 和 or
>>> from sqlalchemy import and_, or_
>>> u = db.session.query(Users).filter(Users.id > 1, Users.name == 'MuMu').all()
>>> u = db.session.query(Users).filter(and_(Users.id > 3, Users.name == 'MuMu')).all()
>>> u = db.session.query(Users).filter(or_(Users.id < 2, Users.name == 'MuMu')).all()
# 通配符
>>> u = db.session.query(Users).filter(Users.name.like('m%')).all()    #e% 以e开头的所有,e_ 以e开头的一个
>>> u = db.session.query(Users).filter(~Users.name.like('m%')).all()   #~ 指 not in
>>> u = db.session.query(Users).filter(~Users.name.like('%m%')).all()   #name中存在m
#切片(限制)
>>> u = db.session.query(Users)[1:2]
#排序
>>> u = db.session.query(Users).order_by(Users.name.desc()).all()#按名字降序,desc降序
>>> u = db.session.query(Users).order_by(Users.name.desc(), Users.id.asc()).all()#按名字降序,id升序,desc降序,asc升序
#group by #根据聚合索引进行二次查询要用having
>>> u = db.session.query(Users.name).group_by(Users.name).having(func.count(Users.id)>1).all()#筛选出名字数量大于1的记录
>>> u = db.session.query(Users.name).group_by(Users.name).having(func.count(Users.id).between(2,3)).all()#筛选出名字数量大等于2,小等于3的记录
#outejoin:左链接
>>> pages = db.session.query(Position.id, Position.name.label('pname'), Position.system_sku, Position.custom_sku, Position.user_id, 
            Position.uptime, Area.name.label('aname'), Warehouse.name.label('whname')).outerjoin(Area, Area.id==Position.area_id).\
        outerjoin(Warehouse, Warehouse.id==Area.warehouse_id).filter(Position.system_sku.in_(position_syskus)).order_by(OrderBy.desc())\
        .all()
## 分页 paginate
>>> pages = db.session.query(Position.id, Position.name.label('pname'), Position.system_sku, Position.custom_sku, Position.user_id, 
            Position.uptime, Area.name.label('aname'), Warehouse.name.label('whname')).outerjoin(Area, Area.id==Position.area_id).\
        outerjoin(Warehouse, Warehouse.id==Area.warehouse_id).filter(Position.system_sku.in_(position_syskus)).order_by(OrderBy.desc())\
        .paginate(page, per_page=10, error_out=False)

最后在附加一些mysql导入导出的常用方式:

#1.导出整个数据库
>>> mysqldump -u 用户名 -p 数据库名 > 导出的文件名
>>> mysqldump -u root -p test > test.sql
#2.导出一个表
>>> mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
>>> mysqldump -u root -p test user> test_user.sql
#3.导出一个数据库结构
>>> mysqldump -u root -p -d --add-drop-table dbname >d:/dbname_db.sql
>>> -d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
#4.导入数据库
#常用source 命令
#进入mysql数据库控制台,如
>>> mysql -u root -p
>>> mysql>use 数据库
#然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
>>> mysql>source d:/dbname.sql
1).导出指定表的数据
>>> mysqldump -t database -uusername -ppassword --tables table1 table2 table3 table4>C:\allData.sql
2).导出指定表的结构
>>> mysqldump -d database -uusername -ppassword --tables table1 table2 table3 table4>C:\alltable.sql
3).导出表的数据及结构
>>> mysqldump  database -uusername -ppassword --tables table1 table2 table3 table4>C:\allData.sql	

发表评论

邮箱地址不会被公开。 必填项已用*标注