源代码
#需要确保mariadb服务已开启,且dbconn与该文件在同一目录下
from dbconn import Session,Departments,Salary
#建立到数据库的会话链接
session=Session() #创建会话类实例
#查询时,直接查询类,返回的是类的所有实例
qset1=session.query(Departments)
#qset1只是查询语句,取值时,才会真正连接数据库
print(qset1)
#通过会话操作数据库
#从qset1中取值,方法一,使用all方法
result1=qset1.all()
print(result1)
#从qset1取值,方法二,直接遍历
for dep in qset1:
print(dep.dep_id,dep.dep_name)
#查询时,查询的是类属性,返回的是元组
qset2=session.query(Employees.name,Employees.email)
for data in qset2:
print(data)
for name,email in qset2:
print(name,email)
#查询完排序
qset3=session.query(Departments).order_by(Departments.dep_id,Departments.dep_name)
for dep in qset3:
print(dep.dep_id,dep.dep_name)
print('*'*50)
#切片
qset4=session.query(Departments).order_by(Departments.dep_id)[1:3]
for dep in qset4:
print(dep.dep_id,dep.dep_name)
print('*'*50)
#过滤
qset5=session.query(Departments).filter(Departments.dep_id<3)
for dep in qset5:
print(dep.dep_id,dep.dep_name)
print('*'*50)
#过滤,in/not in操作符
#查询包含
qset6=session.query(Departments).filter(
Departments.dep_id.in_([3,5]))
for depin qset6:
print(dep.dep_id,dep.dep_name)
print('*'*50)
#查询不包含
qset7=session.query(Departments).filter(
~Departments.dep_id.in_([3,5])
)
for depin qset7:
print(dep.dep_id,dep.dep_name)
print('*'*50)
#字段为空null `不为空
#字段为空
qset8=session.query(Departments).filter(Departments.dep_id.is_(None))
for dep in qset8:
print(dep.dep_id,dep.dep_name)
print('*'*50)
#字段不为空
qset9=session.query(Departments).filter(Departments.dep_id.isnot(None))
for dep in qset9:
print(dep.dep_id,dep.dep_name)
print('*'*50)
#在查询结果中取值,all返回所有列表
qset10=session.query(Employees.name,Employees.email)
print(qset10.all())
print('*'*50)
#在查询结果中屈指,first返回第一项的值
qset11=session.query(Employees.name,Employees.email)
print(qset11.first())
print('*'*50)
#多表查询.query中先写Employees,join就要填Departments
#query中先写Department,join就要填Employees
qset12=session.query(Employees.name,Departments.dep_name).join(Departments)
print(qset12.all())
#修改,就是重新赋值
qset13=session.query(Departments).filter(Departments.dep_name=='人事部')
hr=qset13.first()
hr.dep_name='人力资源部'
#删除
qset14=session.query(Departments).filter(Departments.dep_id==6)
sales=qset14.first()
session.delete(sales)
#将数据提交到实例对应数据库
session.commit()
#关闭session类
session.close()
结果测试
1 人事部
5 市场部
3 开发部
4 测试部
2 运维部
6 销售部
('王俊', 'wj@163.com')
('吴伟超', 'wwc@qq.com')
('董枝俊', 'dzj@163.com')
('李通达', 'ltd@163.com')
('王秀燕', 'wxy@tedu.cn')
('高琦', 'gq@tarena.com')
('王召飞', 'wzf@sohu.com')
('孙燕', 'sy@163.com')
('高鹏飞', 'gpf@163.com')
王俊 wj@163.com
吴伟超 wwc@qq.com
董枝俊 dzj@163.com
李通达 ltd@163.com
王秀燕 wxy@tedu.cn
高琦 gq@tarena.com
王召飞 wzf@sohu.com
孙燕 sy@163.com
高鹏飞 gpf@163.com
查询完排序:
1 人事部
2 运维部
3 开发部
4 测试部
5 市场部
6 销售部
**************************************************
切片:
2 运维部
3 开发部
**************************************************
过滤:
1 人事部
2 运维部
**************************************************
包含:
5 市场部
3 开发部
**************************************************
不包含:
1 人事部
4 测试部
2 运维部
6 销售部
**************************************************
字段为空查询不到:
**************************************************
字段不为空:
1 人事部
5 市场部
3 开发部
4 测试部
2 运维部
6 销售部
**************************************************
#列表形式返回所有:
[('王俊', 'wj@163.com'), ('吴伟超', 'wwc@qq.com'), ('董枝俊', 'dzj@163.com'), ('李通达', 'ltd@163.com'), ('王秀燕', 'wxy@tedu.cn'), ('高琦', 'gq@tarena.com'), ('王召飞', 'wzf@sohu.com'), ('孙燕', 'sy@163.com'), ('高鹏飞', 'gpf@163.com')]
**************************************************
返回第一项:
('王俊', 'wj@163.com')
**************************************************
多表查询:
[('王俊', '开发部'), ('吴伟超', '开发部'), ('董枝俊', '开发部'), ('李通达', '运维部'), ('王秀燕', '运维部'), ('高琦', '人事部'), ('王召飞', '人事部'), ('孙燕', '测试部'), ('高鹏飞', '运维部')]
**************************************************
更新数据:
MariaDB [newcompany]> select * from departments;
+--------+-----------------+
| dep_id | dep_name |
+--------+-----------------+
| 1 | 人力资源部 |
| 5 | 市场部 |
| 3 | 开发部 |
| 4 | 测试部 |
| 2 | 运维部 |
| 6 | 销售部 |
+--------+-----------------+
可以看到人事部更换为人力资源部
删除:
MariaDB [newcompany]> select * from departments;
+--------+-----------------+
| dep_id | dep_name |
+--------+-----------------+
| 1 | 人力资源部 |
| 5 | 市场部 |
| 3 | 开发部 |
| 4 | 测试部 |
| 2 | 运维部 |
+--------+-----------------+