博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python学习笔记 - MySql的使用
阅读量:6275 次
发布时间:2019-06-22

本文共 4801 字,大约阅读时间需要 16 分钟。

一、安装MySql模块

Python2.X

pip install MySQLdb

Python3.X

pip install pymysql

二、数据库连接接口

由于Python统一了数据库连接的接口,所以 pymysql 和 MySQLdb 在使用方式上是类似的:

pymysql.Connect()参数说明host(str):      MySQL服务器地址port(int):      MySQL服务器端口号user(str):      用户名passwd(str):    密码db(str):        数据库名称charset(str):   连接编码connection对象支持的方法cursor()        使用该连接创建并返回游标commit()        提交当前事务rollback()      回滚当前事务close()         关闭连接cursor对象支持的方法execute(op)     执行一个数据库的查询命令fetchone()      取得结果集的下一行fetchmany(size) 获取结果集的下几行fetchall()      获取结果集中的所有行rowcount()      返回数据条数或影响行数close()         关闭游标对象

 

三、范例

MySql脚本

-- ------------------------------ Table structure for account-- ----------------------------DROP TABLE IF EXISTS `account`;CREATE TABLE `account`  (  `acctid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  `money` decimal(50, 0) NULL DEFAULT NULL) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of account-- ----------------------------INSERT INTO `account` VALUES ('1', '张三', 50);INSERT INTO `account` VALUES ('2', '李四', 150);

 

Python程序

#   coding:utf8import sysimport pymysqlclass TransferMoney(object):    def __init__(self, conn):        self.conn = conn    def check_acct_available(self, acctid):        cursor = self.conn.cursor()        try:            sql = "select * from account where acctid='%s'" % acctid            print("check_acct_available:" + sql)            cursor.execute(sql)            rs = cursor.fetchall()            if len(rs) != 1:                raise Exception("帐号%s不存在" % acctid)        finally:            cursor.close()    def has_enough_money(self, acctid, money):        cursor = self.conn.cursor()        try:            sql = "select * from account where acctid='%s' and money>%s" % (                acctid, money)            print("has_enough_money:" + sql)            cursor.execute(sql)            rs = cursor.fetchall()            if len(rs) != 1:                raise Exception("帐号%s没有足够的金额" % acctid)        finally:            cursor.close()    def reduce_money(self, acctid, money):        cursor = self.conn.cursor()        try:            sql = "update account set money=money-%s where acctid='%s' " % (                money, acctid)            print("reduce_money:" + sql)            cursor.execute(sql)            if cursor.rowcount != 1:                raise Exception("帐号%s减款失败" % acctid)        finally:            cursor.close()    def add_money(self, acctid, money):        cursor = self.conn.cursor()        try:            sql = "update account set money=money+%s where acctid='%s' " % (                money, acctid)            print("add_money:" + sql)            cursor.execute(sql)            if cursor.rowcount != 1:                raise Exception("帐号%s加款失败" % acctid)        finally:            cursor.close()    def transfer(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()        except Exception as e:            self.conn.rollback()            print("transfer出现异常:" + str(e))            raise edef main():    source_acctid = sys.argv[1]    print("转出帐号=" + source_acctid)    target_acctid = sys.argv[2]    print("转入帐号=" + target_acctid)    money = sys.argv[3]    print("金额=" + money)    # 连接数据库    conn = pymysql.Connect(        host='localhost',        port=3306,        user='root',        passwd='root',        db='OtkDb',        charset='utf8')    tr_money = TransferMoney(conn)    try:        tr_money.transfer(source_acctid, target_acctid, money)    except Exception as e:        print("main出现异常:" + str(e))    finally:        conn.close()if __name__ == '__main__':    main()

 四、运行效果

PS H:\web\Python> & python h:\web\Python\01.MySql\db.py 1 2 50转出帐号=1转入帐号=2金额=50check_acct_available:select * from account where acctid='1'check_acct_available:select * from account where acctid='2'has_enough_money:select * from account where acctid='1' and money>50reduce_money:update account set money=money-50 where acctid='1'add_money:update account set money=money+50 where acctid='2' PS H:\web\Python> & python h:\web\Python\01.MySql\db.py 1 2 50转出帐号=1转入帐号=2金额=50check_acct_available:select * from account where acctid='1'check_acct_available:select * from account where acctid='2'has_enough_money:select * from account where acctid='1' and money>50transfer出现异常:帐号1没有足够的金额main出现异常:帐号1没有足够的金额

 

参考:

http://www.cnblogs.com/woider/p/5926744.html

 

转载于:https://www.cnblogs.com/chuancheng/p/8456918.html

你可能感兴趣的文章
IOS开发—App 在 IOS 8 的simulator运行时,定位卡死bug解决
查看>>
windows 密钥登陆 linux
查看>>
IOS 录制视频
查看>>
limit检查
查看>>
Android Things 简介
查看>>
菜鸟学Linux 第049篇笔记 DNS log, zone, view
查看>>
菜鸟学Linux 第054篇笔记 建立加密的http
查看>>
ListView 的多选模式
查看>>
宏正自动科技发表新款8/16端口双滑轨LCD KVM多电脑切换器
查看>>
解决 Missing GL version
查看>>
VS 编译链接错误集锦
查看>>
Dns域名服务器之,ACL ,转发域及子域授权的基本配置
查看>>
Android权限列表
查看>>
Linux中的网络监控命令
查看>>
360项目-07
查看>>
使用Nginx进行TCP/UDP端口转发
查看>>
读书笔记2(Effective java)
查看>>
[bat]批量替换文件内容
查看>>
Java代码到字节码——第一部分
查看>>
Linux挂载安装VMware tool
查看>>