要使用sys,要先用import sys导入。
Python就是使用sys.argv[]来获取我们输入的值(从1开始),就好像是java中的Scanner reader=new Scanner(System.in)一样用来获取控制平台输入的值。
下面是数据库转账的例子:
#coding:utf8
import sys
import MySQLdb
class TransferMoney(object):
def __init__(self,conn):
self.conn=conn
def check_acct_available(self,id):
cursor=self.conn.cursor()
try:
sql="select * from account where id=%s"%id
cursor.execute(sql)
print "check_acct_available"+sql
rs=cursor.fetchall()
if len(rs)!=1:
raise Exception("账号%s不存在"%id)
finally:
cursor.close()
def has_enough_money(self, id, money):
cursor=self.conn.cursor()
try:
sql="select * from account where id=%s and money>%s"%(id,money)
cursor.execute(sql)
print "has_enough_money"+sql
rs=cursor.fetchall()
if len(rs)!=1:
raise Exception("账号%s没有足够的钱"%id)
finally:
cursor.close()
def reduce_money(self, id, money):
cursor=self.conn.cursor()
try:
sql="update account set money=money-%s where id=%s"%(money,id)
cursor.execute(sql)
print "reduce_money"+sql
rs=cursor.fetchall()
if cursor.rowcount!=1:
raise Exception("账号%s减款失败"%id)
finally:
cursor.close()
def add_money(self, id, money):
cursor=self.conn.cursor()
try:
sql="update account set money=money+%s where id=%s"%(money,id)
cursor.execute(sql)
print "add_money"+sql
rs=cursor.fetchall()
if cursor.rowcount!=1:
raise Exception("账号%s加款失败"%id)
finally:
cursor.close()
def transfer(self,source_id,target_id,money):
try:
self.check_acct_available(source_id)
self.check_acct_available(target_id)
self.has_enough_money(source_id,money)
self.reduce_money(source_id,money)
self.add_money(target_id,money)
self.conn.commit()
except Exception as e:
self.conn.rollback()
raise e
if __name__=="__main__":
source_id=sys.argv[1]
target_id=sys.argv[2]
money=sys.argv[3]
conn=MySQLdb.Connect(
host='127.0.0.1',
port=3306,
user='root',
passwd='1004758012',
db='imooc',
charset='utf8'
)
tr_money=TransferMoney(conn)
try:
tr_money.transfer(source_id,target_id,money)
except Exception as e:
print "出现问题:"+str(e)
finally:
conn.close()