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

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

Oct 04, 2017 am 09:25 AM
mysql python 은행

이 글은 간단한 은행 송금 작업을 시뮬레이션하기 위해 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으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

DeepSeek Xiaomi를 다운로드하는 방법 DeepSeek Xiaomi를 다운로드하는 방법 Feb 19, 2025 pm 05:27 PM

DeepSeek Xiaomi를 다운로드하는 방법

PHP에서 MySQL 쿼리 성능을 최적화하는 방법은 무엇입니까? PHP에서 MySQL 쿼리 성능을 최적화하는 방법은 무엇입니까? Jun 03, 2024 pm 08:11 PM

PHP에서 MySQL 쿼리 성능을 최적화하는 방법은 무엇입니까?

Google AI, 개발자를 위한 Gemini 1.5 Pro 및 Gemma 2 발표 Google AI, 개발자를 위한 Gemini 1.5 Pro 및 Gemma 2 발표 Jul 01, 2024 am 07:22 AM

Google AI, 개발자를 위한 Gemini 1.5 Pro 및 Gemma 2 발표

PHP에서 MySQL 백업 및 복원을 사용하는 방법은 무엇입니까? PHP에서 MySQL 백업 및 복원을 사용하는 방법은 무엇입니까? Jun 03, 2024 pm 12:19 PM

PHP에서 MySQL 백업 및 복원을 사용하는 방법은 무엇입니까?

PHP를 사용하여 MySQL 테이블에 데이터를 삽입하는 방법은 무엇입니까? PHP를 사용하여 MySQL 테이블에 데이터를 삽입하는 방법은 무엇입니까? Jun 02, 2024 pm 02:26 PM

PHP를 사용하여 MySQL 테이블에 데이터를 삽입하는 방법은 무엇입니까?

MySQL 8.4에서 mysql_native_password가 로드되지 않음 오류를 수정하는 방법 MySQL 8.4에서 mysql_native_password가 로드되지 않음 오류를 수정하는 방법 Dec 09, 2024 am 11:42 AM

MySQL 8.4에서 mysql_native_password가 로드되지 않음 오류를 수정하는 방법

PHP에서 MySQL 저장 프로시저를 사용하는 방법은 무엇입니까? PHP에서 MySQL 저장 프로시저를 사용하는 방법은 무엇입니까? Jun 02, 2024 pm 02:13 PM

PHP에서 MySQL 저장 프로시저를 사용하는 방법은 무엇입니까?

당신은 그에게 Deepseek에게 어떻게 물어 봐요 당신은 그에게 Deepseek에게 어떻게 물어 봐요 Feb 19, 2025 pm 04:42 PM

당신은 그에게 Deepseek에게 어떻게 물어 봐요

See all articles