-
建立链接 conn
-
获取游标cur
-
执行sql execute(sql,(可迭代类型的参数集))
-
sql是查 -- 只涉及文件的读操作
-
fetchone()
-
fetchmany(n)
-
fetvhall()
-
-
增删改 -- 涉及到文件的写操作
-
conn.comimit()
-
-
-
关闭游标和链接
-
cur.close()
-
conn.close()
-
代码实现:
import pymysql
conn = pymysql.conn(host = ‘localhost‘, user = ‘root‘, password = ‘123‘, database = ‘demo‘) # 返回的是一个对象
?
# cur游标 cur数据库操作符
cur = conn.curson()
sql = ‘insert into employee values(%s, %s, %s, %s)‘
# 操作文件
with open(‘add.file‘, ‘r‘, encoding=‘utf-8‘) as f:
for line in f:
try:
lst = line.strip().split(‘|‘)
cur.execute(sql,lst) # 会自动将数据补充
conn.commit()
except:
conn.rollback()
cur.close()
conn.close()
?
?
# sql 注入
# 登录注册 + database
# 表 userinfo
?
cur = conn.curson()
name = input(‘请输入用户名:‘)
password = input(‘请输入用户密码:‘)
sql = ‘select * from userinfo where username = %s and password = %s;‘
ret = cur.execute(sql,(name,password))
if ret:
print(‘登陆成功‘)
else:
print(‘登陆失败‘)
?
多表查询
连表
内连接(所有不在条件匹配内的数据,都会被踢出连表)
方式一:
select * from employee,department where dep_id = department.id;
?
方式二:
select * from employee inner join department on dep_id = department.id;
?
实例1:以内连接的方式查询employee和department表,并且employee表中的age字段值必须大于25,即找出年龄大于25岁的员工以及员工所在的部门
select employee.name,department.name from eemployee inner join department on dep_id = department.id wwhere age > 25;
取别名简写代码:
select e.name,d.name from employee e inner join department d on dep_id = d.id where age > 25;
?
示例2:以内连接的方式查询employee和department表,并且以age字段的升序方式显示
select * from employee inner join department d on dep_id = d.id order by age;
外连接
左外连接 left join
select * from employee left join department on dep_id = department.id;
?
右外连接 right join
select * from employee right join department on dep_id = department.id;
?
全外连接 full join
select * from employee left join department on dep_id = department.id
union
select * from eemployee right join department on dep_id = department.id;
子查询
查询平均年龄再25以上的部门名:
先再employee中查询平均年龄再25以上的部门id
select dep_id from employee group by dep_id having avg(age) > 25;
再去department中查询部门名字
select name from department where id in (select dep_id from employee group by dep_id having avg(age) > 25);
查看技术部员工姓名:
先去department中查询技术部的id
select id from department where name = ‘技术‘:
再去employee中查询员工姓名
select name from employee where dep_id = (select id from department where name = ‘技术‘);
查看不足1人的部门名(子查询得到的是有人的部门id):
先再employee中查看有人的部门id
select distinct dep_id from employee;
再去department中找什么id没有再上面的表中
select name from department where id not in (select distinct dep_id from employee);
查询大于所有人平均年龄的员工名与年龄:
先查所有人的平均年龄
select avg()age from employee;
在查询大于平均年龄的员工名与年龄
select name,age from employee where age > (select avg(age) from employee);
查询大于部门内平均年龄的员工名、年龄:
先查询各部门的平均年龄
select dep_id,avg(age) from employee group by dep_id;
将上面所得到表与employee表连接起来
select * from employee as e inner join (select dep_id,avg(age) from employee group by dep_id) as t on e.dep_id = t.dep_id;
再查询大于各部门中大于平均年龄的人
select * from employee as e inner join (select dep_id,avg(age) from employee group by dep_id) as t on e.dep_id = t.dep_id where e.age > t.avg(age);
原文:https://www.cnblogs.com/womenzt/p/12436853.html
如果您也喜欢它,动动您的小指点个赞吧