Python DB API
Python访问数据库的统一接口规范
www.python.ord/dev/peps/pep-0249/
python DB API包含的内容
如果不关闭会占用数据本身等各种资源,大量连接被占用会造成性能问题。
数据库连接对象connection
连接对象:建立Python客户端与数据库的网络连接
创建方法:MySQLdb.Connect(参数)
connection对象支持的方法
import pymysql
conn = pymysql.Connect(host='127.0.0.1',port=3306,user='xx',passwd='xx',charset='utf8')
cursor=conn.cursor()
print(conn)
# <pymysql.connections.Connection object at 0x00000181C8CD0978>
print (cursor)
# <pymysql.cursors.Cursor object at 0x00000181C8D75B38>
cursor.close()
conn.close()
数据库游标对象cursor
游标对象:用于执行查询和获取结果
cursor对象支持的方法
execute方法:执行SQL,将结果从数据库获取到客户端
fetch*()方法:移动rownumber,类似指针,返回数据
最开始rownumber=0,执行fetchone方法,返回第一条数据,rownumber=1,执行fetchmany(3)方法,rownumber=4,返回2,3,4条数据,以此类推。
select查询数据
import pymysql
conn = pymysql.Connect(host='127.0.0.1',port=3306,user='xx',passwd='xx',db='db1',charset='utf8')
cursor = conn.cursor()
sql = 'select * from users'
cursor.execute(sql)
print (cursor.rowcount)
rs = cursor.fetchone() # 将第一条数据放到这里
print(rs)
rs2 = cursor.fetchmany(3)
print(rs2)
rs3 = cursor.fetchall()
print(rs3)
cursor.close()
conn.close()
import pymysql
conn = pymysql.Connect(host='127.0.0.1',port=3306,user='xx',passwd='xx',db='db1',charset='utf8')
cursor = conn.cursor()
sql = 'select * from users'
cursor.execute(sql)
rs = cursor.fetchall() # 获取数据后根据需要进行处理
for row in rs:
print('userid=%s,username=%s' % row)
cursor.close()
conn.close()
更新数据库
事务是指操作的集合,回滚是回到原来状态
事务:访问和更新数据库的一个程序执行单元
事务具有原子性、一致性、隔离性、持久性。
原子性:事务中包括的各种操作要么都做,要么都不做。
(例如:转账——一个人少100元,一个人多100元)
一致性:事务必须使数据库从一个一致性状态变到另一个一致性状态。
(两个人的钱加起来仍然是100元)
隔离性:多个事务同时执行时不相互影响。
持久性:事务一旦提交,对数据库的改变就是永久性的。
开发中怎样使用事务?
关闭自动commit:(默认关闭)防止一方执行,另一方没有执行
回滚:回到没有执行的状态
import pymysql
conn = pymysql.Connect(host='127.0.0.1',port=3306,user='xx',passwd='xx',db='db1',charset='utf8')
cursor = conn.cursor()
sql_insert = "insert into users (userid,username) values(10,'tom')"
sql_update = 'delete from user where userid<3'
cursor.execute(sql_insert)
cursor.execute(sql_update)
print(cursor.rowcount) #上面这条语句对数据库造成了多少行的影响
cursor.execute(sql_update)
conn.commit() # 使事务生效
cursor.close()
conn.close()
# 如果前面两条成功,后面失败,则需要回滚
import pymysql
conn = pymysql.Connect(host='127.0.0.1',port=3306,user='xx',passwd='xx',db='db1',charset='utf8')
cursor = conn.cursor()
sql_insert = "insert into users (userid,username) values(10,'tom')"
sql_update = 'delete from user where userid<3'
try:
cursor.execute(sql_insert)
print(cursor.rowcount)
conn.commit()
except Exception as e:
print(e)
conn.rollback() # 打印异常,同时回滚
cursor.close()
conn.close()