Python数据库操作、Python DB API、数据库连接对象connection、数据库游标对象cursor
2017-06-21 23:43
691 查看
学习连接地址:点击打开
1.Python DB API
Python DB API包含:数据库连接对象:connection数据库交互对象:cursor数据库异常类:exceptions开发数据库程序流程:1.创建connection对象,获取cursor2.使用cursor执行SQL3.使用cursor获取数据、判断执行状态4.提交事务 或者 回滚事务使用Python DB AP访问数据库流程:开始------->创建数据库连接connection------>获取cursor------>处理数据(增删查改)------->关闭cursor------>关闭connection------>结束2.数据库连接对象connection
创建方法:MySQLdb.connect(参数)参数名 类型 说明
host 字符串 MySQL服务器地址
port 数字 MySQL服务器端口号 user 字符串 用户名 passwd 字符串 密码 db 字符串 数据库名称 charset 字符串 连接编码Connection对象支持的方法:
方法名 说明
cursor() 使用该连接创建并返回游标 commit() 提交当前事务 rollback() 回滚当前事务 close() 关闭丽连接
创建数据库连接例子
import MySQLdb conn = MySQLdb.connect( host='127.0.0.1', port=3306, user='root', passwd='mysql1991', db='testpy', charset='utf8' ) cursor = conn.cursor() print conn print cursor cursor.close() conn.close()
3.数据库游标对象cursor
游标对象:用于执行查询和获取结果cursor支持的方法 参数名 说明
execute(op[,args]) 执行一个数据库查询和命令,将结果从数据库获取到客服端 fetchone 取的结果集的下一行 fetchmany(size) 获得结果集下几行 fetchall() 获取结果集中剩下的所有行 rowcount 最近一次execute返回数据的行数或影响行数,获取缓冲区中数据所有行数 close() 关闭游标对象fetch*()方法:移动rownumber,返回数据select语句获取数据库数据
# -*-coding:utf-8-*- import MySQLdb conn=MySQLdb.Connect(host='127.0.0.1',port=3306,user='root',passwd='mysql1991',db='testpy',charset='utf8') cursor = conn.cursor() #sql查询语句 sql='select * from user ' #sql语句执行 cursor.execute(sql) #获取返回数据总条数 rs=cursor.rowcount print rs #获取返回的第一条数据,此时游标rownumber=0,获取后=1 rs=cursor.fetchone() print rs #获取返回数据的接下来3条数据,此时游标rownumber=1,获取后=4 rs=cursor.fetchmany(3) print rs #获取剩下的所有返回数据,此时游标rownumber=4,获取后=最后条 rs=cursor.fetchall() print rs #循环获取,对每条数据进行处理 for row in rs: print 'userID=%s username=%s'% row cursor.close() conn.close()
事务的概念 事务:访问和更新数据库的一个程序执行单元 -原子性:事务中包括的诸操作要么都做,要么都不做 -一致性:事务必须是数据库从一致性状态变到另一个一致性状态 -隔离性:一个事务的执行不能被其他事务干扰 -永久性:事务一旦提交。它对数据库的改变就是永久性的
开发中的使用事务 -关闭自动commit:设置conn.autocommit(False) -正常结束事务:conn.commit() -异常结束事务:conn.rollback()
增删改中事务的使用
# -*-coding:utf-8-*-import MySQLdbconn = MySQLdb.Connect(host='127.0.0.1', port=3306, user='root', passwd='mysql1991', db='testpy', charset='utf8')cursor = conn.cursor()# 增删改sql_insert = "insert into user(id,username) VALUE (10,'name10')"sql_update = "update user set username='name91' where id=9"sql_dalete = "delete from user where id<3"try:#如果没有出现异常,则提交事务cursor.execute(sql_insert)print cursor.rowcount # 1cursor.execute(sql_update)print cursor.rowcount # 1cursor.execute(sql_dalete)print cursor.rowcount # 2conn.commit()except Exception as e:#如果出现异常,则打印异常并且回滚事务print econn.rollback()cursor.close()conn.close()例子,银行转账操作模拟:
# coding:utf8# sys.argv:如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行。import sysimport MySQLdbclass TransferMoney(object):def __init__(self, conn):self.conn = conndef transfer(self, source_account, target_account, money):try:self.check_account_available(source_account) # 检查source_account来源账户是否可用的方法self.check_account_available(target_account) # 检查target_account目标账户是否可用的方法self.have_enough_money(source_4000account, money) # 检查source_account来源账户是否有足够的钱self.reduce_money(source_account, money) # source_account来源账户减去moneyself.add_money(target_account, money) # target_account目标账户增加相应的钱moneyself.conn.commit() # 如果都上面所以的操作都没有异常,则提交事务执行except Exception as e:self.conn.rollback()raise e# 检查账户是否可用def check_account_available(self, account):cursor = self.conn.cursor()try:sql = "select * from account where id=%s" % accountcursor.execute(sql)print 'check_account_available' + sqlrs = cursor.fetchall()if len(rs) != 1:raise Exception('账号 %s 不存在:' % account)finally:cursor.close()# 检查账户余额是否充足def have_enough_money(self, account, money):cursor = self.conn.cursor()try:sql = "select * from account where id=%s and money>=%s" % (account, money)cursor.execute(sql)print 'have_enough_money' + sqlrs = cursor.fetchall()if len(rs) != 1:raise Exception('账号 %s 没有足够的钱:' % account)finally:cursor.close()# 转出账户减去钱def reduce_money(self, account, money):cursor = self.conn.cursor()try:sql = "update account set money=money-%s where id=%s" % (money, account)cursor.execute(sql)print 'reduce_money' + sqlrs = cursor.rowcountif rs != 1:raise Exception('账号 %s 减款失败:' % account)finally:cursor.close()# 收款账户增加钱def add_money(self, account, money):cursor = self.conn.cursor()try:sql = "update account set money=money+%s where id=%s" % (money, account)cursor.execute(sql)print 'add_money' + sqlrs = cursor.rowcountif rs != 1:raise Exception('账号 %s 加款失败:' % account)finally:cursor.close()if __name__ == '__main__': # 只有当本模块之间运行的时候才执行,__name__才等于__main__# sys.argvh从程序外部获取参数的桥梁source_account = sys.argv[1] # 来源账户target_account = sys.argv[2] # 目标账户money_account = sys.argv[3] # 转账金额# 数据库连接conn = MySQLdb.connect(host='127.0.0.1', port=3306, user='root', passwd='mysql1991', db='testpy', charset='utf8')# 转账类TransferMoneytr_money = TransferMoney(conn)try:tr_money.transfer(source_account, target_account, money_account) # transfer:转账类TransferMoney中的方法except Exception as e:print '出现问题:' + str(e)finally:conn.close()
相关文章推荐
- Python:操作PostgreSQL数据库(使用DB API2.0)
- python_慕课\Python操作MySQL数据库\2-2 Python-游标对象cursor.py
- python操作mysql(二)数据库连接和游标的建立
- Python:操作PostgreSQL数据库(使用DB API2.0)
- python数据库操作(1)--Mysql/Sqlite--DB-API
- 详解Python 数据库的Connection、Cursor两大对象
- Python 数据库的Connection、Cursor两大对象
- python实践3:cursor() — 数据库连接操作
- python DB-API数据库常用对象及方法,postgresql为例
- Python 数据库的Connection、Cursor两大对象
- python数据库连接操作---cursor()
- python实践3:cursor() — 数据库连接操作
- python之cursor() — 数据库连接操作
- python实践3:cursor() — 数据库连接操作
- cursor() — 数据库连接操作 python
- python数据库编程(2) 游标对象cursor
- python中cursor操作数据库
- python中常用的各种数据库操作模块和连接实例
- python下使用mysql.connector 安装以及连接数据库的操作
- Python的数据库API操作