操作系统:MAC
python3下pymysql替代了以前的MySQLdb
首先创建一个数据库:
""" 创建一个database """ import pymysql conn = pymysql.connect(host='localhost', user='root', passwd='123456') cursor = conn.cursor() #创建database cursor.execute("create database fred_db") #删除database #cursor.execute("drop database fred_db") conn.close()
上面代码创建了一个fred_db的数据库,然后创建数据表table,并插入一行数据:
""" 新建数据表,并插入一条数据 """ import pymysql conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='fred_db') cursor = conn.cursor() #创建数据表table cursor.execute("create table user(id int, name varchar(20), password varchar(20))") #插入一条数据 cursor.execute("insert into user values('1', 'Fred', '123456')") #关闭游标 cursor.close() #提交事务,在向数据库插入一条数据时必须有这个方法,否则数据不会被真正的插入 conn.commit() conn.close()
还可以一次性插入多条数据:
""" 一次性插入多条记录 """ import pymysql conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='fred_db') cursor = conn.cursor() #创建数据表table #cursor.execute("create table user(id int, name varchar(20), password varchar(20))") #插入一条数据 #cursor.execute("insert into user values('1', 'Fred', '123456')") #一次性插入多条记录 sqli = "insert into user values(%s, %s, %s)" cursor.executemany(sqli, [ ('2', 'Eric', '123'), ('3', 'Gaby', '123'), ('4', 'David', '123'), ]) #关闭游标 cursor.close() #提交事务,在向数据库插入数据时必须有这个方法,否则数据不会被真正的插入 conn.commit() conn.close()
同时还可以查询已经插入的数据:
""" 查询数据 """ import pymysql conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='fred_db') cursor = conn.cursor() #显示table中有几条数据 numbers = cursor.execute("select * from user") print(numbers) #只能获取一条数据 #result = cursor.fetchone() #print(result) #打印表中的所有数据 info = cursor.fetchmany(numbers) for item in info: print(item) cursor.close() conn.commit() conn.close()
执行事务
事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
- 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
- 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
- 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。
补充:
connect函数的常用参数
user #用户名
password #用户密码
host #主机名
database #数据库名
connect函数会返回连接对象,连接对象方法
close() #关闭连接之后,连接对象和它的游标均不可用
commit() #如果支持的话就提交挂起的事务,否则不做任何事
rollback() #回滚挂起的事务(可能不可用)
cursor() #返回连接的游标对象
游标对象方法
close() #关闭游标
execute(oper[,params]) #执行SQL操作,可能使用参数
executemany(oper,pseq) #对序列中的每个参数执行SQL操作
fetchone() #把查询的结果集中的下一行保存为序列,或者+ None
fetchmany([size]) #获取查询结果集中的多行,默认为1
fetchall() #将所有(剩余)的行作为序列的序列