-
建立鏈接 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);
