Python操作MySQL数据库
2015-12-25 14:45
716 查看
4Python操作MySQL数据库
1.课前准备
python 操作数据库的连接组件的安装请见博文:http://blog.csdn.net/walxiaosage/article/details/503872851.python DB API 介绍
2.python 开发MySQL环境
止
2.python 操作数据库对象
1.数据库连接对象connection连接对象:建立python客户端与数据库的网络连接
创建方法:MySQLdb.Connect(参数)
参数名 | 类型 | 说明 |
host | 字符串 | MySQL服务器地址 |
port | 数字 | MySQL服务器端口 |
user | 字符串 | 用户名 |
passwd | 字符串 | 密码 |
db | 字符串 | 数据库名称 |
charset | 字符串 | 连接编码 |
connection对象支持的方法:
方法名 | 说明 |
cursor() | 使用该连接创建并返回游标 |
commit() | 提交事务 |
rollback() | 回滚事务 |
close() | 关闭连接 |
2.游标对象cursor
游标对象:用于执行查询和获取结果
cursor对象支持的方法:
参数名 | 说明 |
execte(op[,args]) | 执行一个数据库查询和命令(增删改) |
fetchone() | 取的结果集的下一行 |
fetchmany(size) | 获取结果集的下几行 |
fetchall() | 获取结果集中剩下的所有行 |
rowcount | 最近一次exectue返回数据的行数或影响行数 |
close() | 关闭游标对象 |
3.Python 增删改查数据库
1.实例演示select数据代码示例:
import
MySQLdb
conn=MySQLdb.Connect(
host='127.0.0.1',
port=3306,
user='root',
passwd='123456',
db='mysql',
charset='utf-8'
)
cursor=conn.cursor()
sql="select * from user "
cursor.execute(sql)
#此时本地的缓冲区已经存放了所有的数据
print cursor.rowcount
#打印获取到本地的数据的行数
rs=cursor.fetchone()
rs=cursor.fetchmany(3)
rs=cursor.fetchall()
#每次执行都是从上一次的执行结果的后面开始执行
#如果数据量比较小则fetchall()全部获取
#如果数据量比较大则可以一条一条处理,如下:
rs=fetchall()#是一个元组的元组,所以可以二维遍历
for row
inrs:
print"userid=%s,username=%s" %row
2.实例演示insert-update-delete数据
开发中怎样使用事物:
1.关闭自动commit:设置conn.autocommite(False)
2.正常结束事务:conn.commit()
3.异常结束事务:conn.rollback()
import
MySQLdb
conn=MySQLdb.Connect(
host='127.0.0.1',
port=3306,
user='root',
passwd='123456',
charset='utf-8')
cursor=conn.cursor()
sql_insert="insertinto user(userid,username) values(10,'name10')"
sql_update="updateuser set username='name91' where username='name9'"
sql_delete="deletefrom user where userid<3"
try:
cursor.execute(sql_insert)
printcursor.rowcount
#1
cursor.execute(sql_update)
printcursor.rowcount
#1
cursor.execute(sql_delete)
printcursor.rowcount
#2
conn.commit()
except
Exceptionase:
printe
conn.rollback()
cursor.close()
conn.close()
4.使用Python实现实例
1.银行转账实例-代码流程账户A给账户B转账100元
2.准备数据表和代码编写
account:数据表,accid和money字段,且为Innodb引擎
#coding:utf-8
import
sys
import
MySQLdv
class
TransferMoney(object):
def__init__(self,conn):
self.conn=conn
defcheck_acct_available(self,acctid):
cursor=self.conn.cursor()
try:
sql="select * from account where acctid=%s"%acctid
cursor.execute(sql)
print"check_acct_available: " + sql
rs=cursor.fetchall()
iflen(rs)!=1:
raise
Exception("账号%s不存在" %acctid)
finally:
cursor.close()
defhas_enough_money(self,acctid,money):
cursor=self.conn.cursor()
try:
sql="select * from acctid where acctid=%s and money>=%s" %(acctid,money)
cursor.execute(sql)
print"has_enough_money: "+sql
rs=cursor.fetchall()
iflen(rs)!=1:
raise
Exception("账号%s没有足够的money"%acctid)
finally:
cursor.close()
defreduce_money(self,acctid,money):
cursor=self.conn.cursor()
try:
sql="update account set money=money-%s whereacctid=%s" % (money,acctid)
cursor.execute(sql)
print"reduce_money: "+sql
ifcursor.rowcount!= 1:
raise
Exception("帐号%s减款失败"%
acctid)
finally:
cursor.close()
defadd_money(self,acctid,money):
cursor=self.conn.cursor()
try:
sql="update account set money=money+%s where acctid=%s"% (money,acctid)
cursor.execute(sql)
print"add_money: "+sql
ifcursor.rowcount!= 1:
raise
Exception("帐号%s加款失败"%
acctid)
finally:
cursor.close()
deftransfer(self,source_acctid,target_acctid,money):
try:
self.check_acct_available(source_acctid)
self.check_acct_available(target_acctid)
self.has_enough_money(source_acctid,money)
self.reduce_money(source_acctid,money)
self.add_money(target_acctid.money)
self.conn.commit()
exceptException
as e:
self.conn.rollback()
raisee
#为了让上一层的调用再捕捉到该异常,异常对象保存在了对象e中
if __name__=="__main__":#程序的入口
source_acctid=sys.argv[1]
target_acctid=sys.argv[2]
money=sys.argv[3]
#创建转账操作的对象
conn=MySQLdb.Connect(host='127.0.0.1',user='root',passwd='123456',port=3306,charset='utf-8')
tr_money=TransferMoney(conn)
#开始转账操作
try:
tr_money.transfer(source_acctid,target_acctid,money)
exceptException
as e:
print"出现问题:" +str(e)
finally:
conn.close()
相关文章推荐
- python面试题
- 找零钱之美分 python
- Python的groupby
- python 上下文管理器
- python中的urlencode与urldecode
- 【极客学院】-python学习笔记-Python快速入门(面向对象-引入外部文件-Web2Py创建网站)
- 用Python获取命令行输出
- python线程与进程
- python/逻辑回归
- Python基础教程 正则表达式 学习笔记
- Python编程(二):Python进程、线程的那点事儿
- Python标准库的学习准备
- Python continue pass和break
- Python循环语句
- python 代码格式化工具:autopep8
- 几个有用的python脚本
- Blender Python
- 业务系统JSON日志通过python处理并导入Hive方案
- Python学习--爬虫
- python自动化测试(3)- 自动化框架及工具