数据库Python

Python学习

2021-04-25  本文已影响0人  逛逛_堆栈

第二十八天

Python与MySQL交互(二)

1、准备工作、建表、添加数据

#部门表
create table Department(
id int,
name varchar(20) 
);
#员工表
create table Employee(
id int primary key auto_increment,
name varchar(20),
sex enum('male','female') not null default 'male',
age int,
dep_id int
);
# 添加数据
insert into department values
(200,'技术'),
(201,'人力资源'),
(202,'销售'),
(203,'运营');

insert into employee(name,sex,age,dep_id) values
('egon','male',18,200),
('alex','female',48,201),
('wupeiqi','male',38,201),
('yuanhao','female',28,202),
('liwenzhou','male',18,200);

注意:dep_id 这里并没有直接加foreign key约束 只是逻辑外键。

2、执行SQL查询

这里我们以多表查询-查询员工以及对应的部门信息

2.1、创建连接

import pymysql
#创建连接
db = pymysql.connect(host='localhost',port=3306,user='root',
                     passwd='root',database='python_db')

#对数据的增删改查操作在这里

# 关闭连接
db.close()

其中各个参数:
1、host、连接的MySQL主机,若是本地则为localhost;
2、port、连接的MySQL主机端口,默认3306;
3、user、连接的用户名;
4、passwd、连接的密码;
5、database、数据库名字;
6、charset、编码方式,建议utf-8

2.2、编写SQL语句

查询员工信息以及对应的部门名称。

select a.`name`,a.sex,a.age,b.`name` from employee a inner join department b on a.dep_id = b.id

2.3、创建游标、执行查询

cursor = db.cursor()
sql = 'select a.`name`,a.sex,a.age,b.`name` from employee a inner join department b on a.dep_id = b.id'
cursor.execute(sql)
data = cursor.fetchall()
if data:
    for row in data:
        name = row[0]
        sex = '男' if row[1] == 'male' else '女'
        age = row[2]
        dname = row[3]+'部'
        print('姓名:%s,性别:%s,年龄:%d,部门:%s' %(name,sex,age,dname))

游标常用的方法:
1、fetchone(): 该方法获取下一个查询结果集。结果集是一个对象;
2、fetchall():接收全部的返回结果集;
3、rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数;

2.4、关闭连接、资源释放

cursor.close()
db.close()

3、事务

我们对数据库进行增加、删除、修改操作的时候,在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。删除为例:

#删除
import pymysql
#创建连接
db = pymysql.connect(host='localhost',port=3306,user='root',
                     passwd='root',database='python_db')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
#创建SQL语句 cursor.execute执行
sql = 'delete from Student where id = %d' %(3)
try:
    #执行SQL语句
    cursor.execute(sql)
    # 提交执行
    db.commit()
except:
    #发生异常回滚
    db.rollback()
# 关闭游标与数据库连接
cursor.close()
db.close()

4、游标cursor

python数据库编程中,cursor是一个实现了迭代器和生成器的MySQLdb对象,初建游标的时候cursor中还没有数据,只有等到fetchone()或fetchall()的时候才返回一个元组tuple,才支持len()和index()操作,这也是它是迭代器的原因。但同时为什么说它是生成器呢?因为cursor只能用一次,即每用完一次之后记录其位置,等到下次再取的时候是从游标处再取而不是从头再来,而且fetch完所有的数据之后,这个cursor将不再有使用价值了,即不再能fetch到数据了。

上一篇下一篇

猜你喜欢

热点阅读