Python操作MySQL数据库

本文详细介绍如何使用Python操作MySQL数据库,包括连接数据库、执行查询、增删改查等基本操作,并通过具体实例展示如何实现转账功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4Python操作MySQL数据库

1.课前准备
python 操作数据库的连接组件的安装请见博文:http://blog.youkuaiyun.com/walxiaosage/article/details/50387285
1.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()

关闭游标对象

execute执行方法流程:

 

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值