操作环境:python3.4,MySql5.6,pyMySql
python开发MySql环境需要安装python访问mysql的数据库接口程序,这里我用的是python3.4,用的是pymysql。(注意python2.x的小伙伴需要用mysqldb)。这里就不详解安装pymysql了,和安装python的其他插件是一样一样的。
测试环境:测试pyMySql是否安装成功,如下:
import pymysql
print(pymysql)
有结果如下所示,即为正常安装:module ‘pymysql’ from ……
测试成功后,来建立连接对象。用pymysql.connect。
connection对象支持的方法如下:
cursor():使用该连接创建并返回游标
commit():提交当前事务
rollback():回滚当前事务
close():关闭连接
import pymysql
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456',db='lwl', charset='utf8')
cursor=conn.cursor() #创建游标
print(conn)
print(cursor)
cursor.close() #分别关闭资源
conn.cursor()
运行结果如下:
pymysql.connections.Connection object at 0x01F450F0
pymysql.cursors.Cursor object at 0x01F45110
游标对象—-cursor
支持以下方法:
execute(sql):执行一个数据库查询和命令
fetchone():取的结果集的下一行
fetchmany(size):获取结果集的下几行
fetchall():获取结果集中的剩下的所有行
(这里fetch*()方法,可以移动rownumber,相当于指针,用来返回数据)
rowcount:最近一次execute返回数据的行数或者影响的行数
close():关闭游标对象
select实例演示:
创建connection—获取cursor—-使用cursor.execute()执行select语句,使用cursor.fectch*()获取并处理数据—-关闭cursor—-关闭connection。
import pymysql
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456',db='lwl', charset='utf8')
cursor=conn.cursor()
sql="select * from user"
cursor.execute(sql)
rs=cursor.fetchall()
for row in rs:
print("userid=%s,username=%s" % row)
cursor.close()
conn.cursor()
insert/update/delete实例演示:
与select不同的是,需要判断是否出错,如果正常,需要用conn.commit()提交事务,否则使用conn.rollback()回滚事务。
实例一:
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='lwl', charset='utf8')
cursor=conn.cursor()
sql_insert="insert into user(userid,username) VALUE (8,'name8')"
sql_update="update user set username='name71' where userid=7"
sql_delete="delete from user WHERE userid<3"
cursor.execute(sql_insert)
print(cursor.rowcount)
cursor.execute(sql_update)
print(cursor.rowcount)
cursor.execute(sql_delete)
print(cursor.rowcount)
#conn.commit()
cursor.close()
conn.cursor()
这里执行了3条语句,分别看他们对数据库数据的影响是1,1,2。可是,确发现数据库的数据并没有改变,所以,一定要注意需要加上conn.commit()来让事务生效。
实例二:(判断异常回滚)
import pymysql
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456',db='lwl', charset='utf8')
cursor=conn.cursor()
sql_insert="insert into user(userid,username) VALUE (8,'name8')"
sql_update="update user set username='name71' where userid=7"
sql_delete="delete from user WHERE useri<3"
try:
cursor.execute(sql_insert)
print(cursor.rowcount)
cursor.execute(sql_update)
print(cursor.rowcount)
cursor.execute(sql_delete)
print(cursor.rowcount)
conn.commit()
except Exception as e:
print(e)
conn.rollback()
cursor.close()
conn.cursor()
我改了userid,让字段出错。
运行结果如下:
1
1
(1054, “Unknown column ‘useri’ in ‘where clause’”)
并且因为设置了回滚事务,数据库的数据不会改变。稍微解释下为什么要回滚事务。简单来说,事务具有原子性,即两边操作都要同步,假设一个银行转账系统,A君给B君转账100元,会导致A君减100,B君加100。所谓原子性,就是说要么这两个操作同时进行成功,若失败,肯定两步操作都没有进行。