新人学习python。学习慕课网的python操作mysql课程。https://www.imooc.com/video/9219
然后进行都最后发现,卡在了扣钱上面,会显示No result set to fetch from。
以下是源码:
# -$- coding:utf-8 -*-
"""
@author:Zhang
@file:transfer_money.py
@time:2018-02-19 1:48
"""
import sys
import mysql.connector
class TransferMoney(object):
def __init__(self,conn):
self.conn = conn
def check_acct_available(self,accid):
try:
cursor = self.conn.cursor()
sql = "SELECT * FROM account WHERE accid=%s" % accid
cursor.execute(sql)
print("check_acct_available:" + sql)
rs = cursor.fetchall()
if len(rs)!=1:
raise Exception("账号%s不存在" % accid)
finally:
cursor.close()
def has_enough_money(self,accid,money):
try:
cursor = self.conn.cursor()
sql = "SELECT * FROM account WHERE accid=%s and money>%s" % (accid,money)
cursor.execute(sql)
print("has_enough_money:" + sql)
rs = cursor.fetchall()
if len(rs) != 1:
raise Exception("账号%s没有足够钱" % accid)
finally:
cursor.close()
def redue_money(self,accid,money):
try:
cursor = self.conn.cursor()
sql = "UPDATE account SET money=money-%s WHERE accid=%s" % (money,accid)
cursor.execute(sql)
print("reduce_money:" + sql)
rs = cursor.fetchall()
if cursor.rowcount != 1:
raise Exception("账号%s减款失败" % accid)
finally:
cursor.close()
def add_money(self,accid,money):
try:
cursor = self.conn.cursor()
sql = "UPDATE account SET money=money+%s WHERE accid=%s" % (money,accid)
cursor.execute(sql)
print("add_money:" + sql)
rs = cursor.fetchall()
if cursor.rowcount != 1:
raise Exception("账号%s加款失败" % accid)
finally:
cursor.close()
def transfer(self,souce_accid,target_accid,money):
try:
self.check_acct_available(source_accid)
self.check_acct_available(target_accid)
self.has_enough_money(source_accid,money)
# 以上检验都成功的话
self.redue_money(source_accid,money)
self.add_money(target_accid,money)
self.conn.commit()
except Exception as e:
self.conn.rollback()
raise e
if __name__ == "__main__":
source_accid = sys.argv[1]
target_accid = sys.argv[2]
money = sys.argv[3]
conn = mysql.connector.connect(host="127.0.0.1",user="root",password="password",port=3306,db="test")
tr_money = TransferMoney(conn)
try:
tr_money.transfer(source_accid,target_accid,money)
except Exception as e:
print("出现问题:"+str(e))
finally:
conn.close()
我发现问题在于,是python操作mysql抛出unread result from。
然后我就先把
rs = cursor.fetchall()
给注释掉..或者改成 cursor.fetchone() 就能顺利运行了。
还不知道本质原理,但是方法先放着。弄清楚了回来补上。