>백엔드 개발 >파이썬 튜토리얼 >은행 송금 작업을 시뮬레이션하기 위해 MySQL을 운영하는 Python의 간단한 예

은행 송금 작업을 시뮬레이션하기 위해 MySQL을 운영하는 Python의 간단한 예

黄舟
黄舟원래의
2017-10-04 09:25:462463검색

이 글은 간단한 은행 송금 작업을 시뮬레이션하기 위해 MySQL을 운영하는 Python을 주로 소개합니다. 필요한 친구들은 참고하시면 됩니다.

1. 기본 지식

1. MySQL-python 설치

다운로드 후 pip install 설치 패키지

2. Python에서 일반 데이터베이스 프로그램을 작성하기 위한 API 사양

(1) 데이터베이스 연결 개체 연결은 Python 클라이언트와 데이터베이스 간의 네트워크 연결을 설정하며 생성 방법은 MySQLdb.Connect(

매개변수는 6개입니다: Host(mysql 서버 주소, 일반적으로 127.0.0.1)

PORT(MySQL 서버 포트 번호)
User(사용자 이름)
PASSWD(비밀번호)
DB(데이터베이스 이름)
charset

연결 방법: 커서()는 연결을 사용하고 커서를 반환합니다

                                     Close()는 연결을 닫습니다

(2), 데이터베이스 커서 객체 커서, 쿼리를 실행하고 결과를 얻는 데 사용

방법: 실행(op[,args) ]) 데이터베이스 쿼리 및 명령을 실행합니다. 's ‐ through ‐ ‐‐ ‐‐‐‐ 및 ​ 결과를 얻기 위해

         나머지 모든 행에 집중

            행 개수 숫자 행 수 또는 가장 최근 실행으로 반환된 영향을 받은 행 수              사용 사용 사용 사용                   통해 사용 사용 오프를 통해 오프를 통해 ‐ ‐ ‐ ,                                                              to  주문 및 결과 전달을 위해 차량을 운송합니다.



3. 간단한 명령:

select 데이터 쿼리: sql="select * from table name selected item"

insert 데이터 삽입: sql="insert into table name insert item"
update 변경 데이터: sql= " updata 테이블 이름 변경된 항목 설정"

delete 삭제 데이터: sql = "테이블 이름에서 삭제된 항목 삭제"

여기서 는 sql 명령의 키이기도 합니다. 일반적으로 테이블 헤더 = 해당 열을 찾는 열 이름입니다

4. 트랜잭션



데이터베이스에 액세스하고 업데이트하는 프로그램 실행 단위입니다. 실행된 명령을 트랜잭션이라고 할 수 있습니다.

원자성, 일관성, 격리성 및 내구성을 갖습니다.

트랜잭션 실행: ​​ conn.commit() 트랜잭션을 정상적으로 종료합니다.

  conn.rollback() 트랜잭션을 비정상적으로 종료하고 트랜잭션을 롤백합니다. 프로그램 실행 단위에서 연속 연산에 오류가 발생하면 이전 연산을 복원합니다.

간단한 작업 과정: 시작 → 연결 생성 → 커서 가져오기 → 프로그램 실행 단위 → 커서 닫기 → 연결 닫기 → 종료

2. 은행 이체 시스템 코드 시뮬레이션


#coding=utf-8 
import sys 
import MySQLdb 
''''' 
python操作MySQL数据库,模拟银行转账 
''' 
class Trans_for_Money(object): 
 #初始化 类 
 def __init__(self,conn): 
  self.conn = conn 
 #### 1、检查所输入的账号是否存在 #### 
 def check_acct_available(self,source_acctid): 
  #使用与数据库的链接并返回游标 
  cursor=self.conn.cursor() 
  try: 
   #数据库命令 
   sql="select * from tr_money where acctid=%s" %source_acctid 
   #执行命令 
   cursor.execute(sql) 
   #为方便观察执行过程 
   print "check_acct_available:" + sql 
   #讲结果集放入变量result中,若result不等于1,则没有这个账号,输出异常 
   result=cursor.fetchall() 
   if len(result)!=1: 
    raise Exception("账号%s不存在" %source_acctid) 
  finally: 
   #若过程出现问题,仍需要关闭游标对象 
   cursor.close() 
 #### 2、检查减款人余额是否充足,方法与上一个函数一样,只是多加了一个money参数 ### 
 def has_enough_money(self,source_acctid,money): 
  cursor=self.conn.cursor() 
  try: 
   sql="select * from tr_money where acctid=%s and money>%s" %(source_acctid,money) 
   cursor.execute(sql) 
   print "has_enough_money:" + sql 
   result=cursor.fetchall() 
   if len(result)!=1: 
    raise Exception("账号%s余额不足" %source_acctid) 
  finally: 
   cursor.close() 
 #### 3、减款操作 ### 
 def reduce_money(self,source_acctid,money): 
  cursor=self.conn.cursor() 
  try: 
   #数据库命令,减去对应减款人的金额数 
   sql="update tr_money set money=money-%s where acctid=%s" %(money,source_acctid) 
   cursor.execute(sql) 
   print "reduce_money:" + sql 
   #操作的execute()数据行数不等于1则减款失败 
   if cursor.rowcount!=1: 
    raise Exception("账号%s减款失败" %source_acctid) 
  finally: 
   cursor.close() 
 #### 4、收款操作,与减款方法相同 ### 
 def add_money(self,target_acctid,money): 
  cursor=self.conn.cursor() 
  try: 
   sql="update tr_money set money=money+%s where acctid =%s" %(money,target_acctid) 
   cursor.execute(sql) 
   print "add_money:" + sql 
   if cursor.rowcount!=1: 
    raise Exception("账号%s收款失败" %target_acctid) 
  finally: 
   cursor.close() 
 #### 5、分别传入参数,代入上方函数,执行操作 ### 
 def trans_for(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() 
   raise 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', 
       port=3306, 
       user='root', 
       passwd='12345678', 
       db='tt', 
       charset='utf8' 
       ) 
 #手动输入减款人、收款人、转款数 
 source_acctid=raw_input("请输入减款人: ") 
 target_acctid=raw_input("请输入收款人: ") 
 money=raw_input("请输入转款数: ") 
 #将参数传入类中 
 tr_money=Trans_for_Money(conn) 
 try: 
  tr_money.trans_for(source_acctid,target_acctid,money) 
 except Exception as e: 
  print"出现问题:"+str(e) 
 finally: 
  conn.close() 
  #关闭链接
3. 문제 해결


1.sys.argv[ ]

교육영상에 사용된 IDE는 MyEclipse이고, 마지막으로 run.Configuration을 이용해 매개변수 입력을 하고, pycharm을 사용하는데, 멍청해서 못 찾거나, 실제로 존재하지 않는다는 뜻이니까요!

그래서 실행 중 매개변수 입력으로 raw_input()을 사용하기로 했습니다

사실 sys.argv[ ]를 이해하려고 노력했지만 여전히 명확하게 이해되지 않습니다.

2. mysql_Exceptions.IntegrityError: (1062, "'PRIMARY' 키에 대해 '7' 항목이 중복되었습니다.")

이 오류는 삽입하려는 데이터가 이미 존재함을 의미하며 데이터베이스의 데이터를 관찰하는 것이 가장 좋습니다. 자신의 프로그램 작동에 모순이 있습니까

3. 테이블을 생성하거나 값을 입력할 때 MySql 오류: 1170-BLOB/TEXT 열'name'이 키 길이 없이 키 사양에 사용되었습니다

오류 메시지는 BLOB입니다. 또는 TEXT 필드가 지정되지 않은 키 길이를 사용합니다. Key

해결 방법: 다른 기본 키를 설정하거나 데이터 형식을 varchar

로 변경하세요. 자세한 설명 URL: http://myhblog1989.blog.163.com/blog/static/183225376201110875818884/

4. TypeError: 'post'는 이 함수에 대한 잘못된 키워드 인수입니다.

오류 원인: TypeError: "post"는 이 함수에 대한 잘못된 매개 변수입니다.

이 질문은 너무 잘못되어 말이 나오지 않습니다. "post"=' 대신 "port"=3306이라고 썼습니다=' 3306'

5, 1054, "'where 절'의 알 수 없는 열 'acctid'

오류 이유: "acctid" 열을 where에서 찾을 수 없습니다. 조항

하하, 저번 실수로 뇌에 물이 빠져나가지 않았네요. 헤더를 잘못 썼네요...

6. 게다가 공제 항목을 수동으로 입력하는 경우도 있습니다. 수취인이 문자나 한자로 설정되어 있어서 찾을 수 없습니다

제 코드나 데이터베이스 생성 때문일 수도 있습니다. 설정 문제는 아직 문자 변환 및 데이터베이스 측면에서 초보자라는 것을 의미합니다. 계속 파이팅하세요! 7. MySQL 데이터베이스 시작

컴퓨터 → 마우스 오른쪽 버튼 클릭 → 관리 → 서비스 및 애플리케이션 → 서비스 → MySQL 찾기 → 시작 마우스 오른쪽 버튼 클릭

4. 특정 실행 표시 1. table

2. 코드 실행, 감산자, 수취인 및 이체 금액 입력

3, 실행 결과는 코드에 특별히 인쇄된 작업 프로세스 표시

4입니다. 실행 후 tr_money 테이블 상태


Summary

위 내용은 은행 송금 작업을 시뮬레이션하기 위해 MySQL을 운영하는 Python의 간단한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.