이 글은 간단한 은행 송금 작업을 시뮬레이션하기 위해 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. 간단한 명령:
insert 데이터 삽입: sql="insert into table name insert item"
update 변경 데이터: sql= " updata 테이블 이름 변경된 항목 설정"
여기서 는 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. 문제 해결
교육영상에 사용된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!