首頁 後端開發 Python教學 python操作MySQL模擬銀行轉帳操作的簡單實例

python操作MySQL模擬銀行轉帳操作的簡單實例

Oct 04, 2017 am 09:25 AM
mysql python 銀行

這篇文章主要介紹了python操作MySQL 模擬簡單銀行轉帳操作,需要的朋友可以參考下

一、基礎知識

1、MySQL-python的安裝

下載,然後pip install 安裝套件

2、python編寫通用資料庫程式的API規格

(1)、資料庫連接物件connection,建立python用戶端與資料庫的網路連接,建立方法為MySQLdb.Connect(參數)

     參數有六個:     host(MySQL伺服器位址一般本地為127.0.0.1)

                                     user(使用者名稱)
                                   db(資料庫名稱)
                  編碼)

     connection的方法: cursor()使用此連接並返回遊標

                 

                                                        close()關閉連接


(2)、資料庫遊標物件cursor,用於執行查詢和取得結果

    方法:execute(op[,args])執行一個資料庫查詢和命令

              fetchone()在下一行取得結果集的下一行

               

              rowcount 最近一次execute回傳資料的行數或影響行數

              close()關閉遊標物件

connection與cursor:connection相當於python與MySQL之間的道路,而cursor相當於路上的運輸車來傳送指令與結果。

3、簡單指令:

select  查詢資料:sql="select * from 表名所查項目"insert  插入資料:sql= “insert into 表名  所插項目”update 更改資料: sql=“updata 表名set  所插項目”

update 更改資料: sql=“updata 表名set  所改項目”

delete 刪除資料: sql=“delete from 表名所刪除項目”
wheresql指令的關鍵存在,通常是  where 表頭=列名來定位那一列


#4、交易

存取和更新資料庫的一個程式執行單元,所執行的命令,都可以稱為事務

具有原子性,一致性,隔離性,持久性

事務執行:

     conn.commit() 正常結束交易

     conn.rollback() 異常結束事務,對事務進行回滾,若程式執行單元中的連續的操作在進行中出錯,之前的操作還原。

簡單作業流程:    開始→ 建立connection →取得cursor → 程式執行單元→ 關閉cursor → 關閉connection → 結束

#二、模擬銀行轉帳系統代碼

#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() 
  #关闭链接
登入後複製


三、問題解決

1、sys.argv [ ] 

因為教學影片中使用的IDE是MyEclipse,最後用run.Configuration 輸入參數,而我用的是pycharm,表示笨的找不到還是其實它沒有!

所以選擇用raw_input() 在執行過程中輸入參數

其實有去了解sys.argv[ ],但還是懂不太清楚。

2、  mysql_exceptions.IntegrityError: (1062, "Duplicate entry '7' for key 'PRIMARY'")

#這個錯誤表示你所要插入的資料已經存在,最好去觀察一下資料庫的資料與自己的程式操作是否有矛盾

3、MySql 建表或輸入數值時發生錯誤:1170-BLOB/TEXT column'name'used in key specification without a key length

#錯誤訊息為BLOB或TEXT欄位使用了未指定鍵值長度的鍵

解決方法:設定其他為主鍵  或   將資料形式改為varchar

具體解釋網址:http:/ /myhblog1989.blog.163.com/blog/static/183225376201110875818884/

4、TypeError: 'post' is an invalid keyword argument for this function

#or: “原因錯誤”是這個函數的無效參數

這個問題錯的很無語,一時腦子進水把“port”=3306 寫成了“post”='3306'

5、1054, "Unknown column 'acctid' in 'where clause'

錯誤原因:在where子句中找不到「acctid」欄位

呵呵,上個錯誤腦子進的水沒排出來,把表頭寫錯了…………

6、另外,還有一個錯誤是手動輸入的減款,收款人設為字母或漢字時找不到

可能是我程式碼或資料庫建表時的設定問題,表示在字元轉換和資料庫這方面還是小白一枚,繼續奮鬥吧! → 管理→ 服務與應用程式→ 服務→ 找到MySQL → 右鍵啟動

四、具體執行顯示

1、資料庫tr_money 表的初始狀態

2、程式碼執行,輸入減款人,收款人,轉款金額

3 、執行,結果出現程式碼中刻意print 的操作程序顯示

4、資料庫tr_money 表執行後狀態


#總結

以上是python操作MySQL模擬銀行轉帳操作的簡單實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1269
29
C# 教程
1249
24
MySQL和PhpMyAdmin:核心功能和功能 MySQL和PhpMyAdmin:核心功能和功能 Apr 22, 2025 am 12:12 AM

MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。

Python vs. JavaScript:開發環境和工具 Python vs. JavaScript:開發環境和工具 Apr 26, 2025 am 12:09 AM

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

在MySQL中解釋外鍵的目的。 在MySQL中解釋外鍵的目的。 Apr 25, 2025 am 12:17 AM

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。

Golang vs. Python:利弊 Golang vs. Python:利弊 Apr 21, 2025 am 12:17 AM

Golangisidealforbuildingscalablesystemsduetoitsefficiencyandconcurrency,whilePythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.Golang'sdesignencouragesclean,readablecodeanditsgoroutinesenableefficientconcurrentoperations,t

Laravel vs. Python(與框架):比較分析 Laravel vs. Python(與框架):比較分析 Apr 21, 2025 am 12:15 AM

Laravel適合團隊熟悉PHP且需功能豐富的項目,Python框架則視項目需求而定。 1.Laravel提供優雅語法和豐富功能,適合需要快速開發和靈活性的項目。 2.Django適合複雜應用,因其“電池包含”理念。 3.Flask適用於快速原型和小型項目,提供極大靈活性。

Python vs. C:了解關鍵差異 Python vs. C:了解關鍵差異 Apr 21, 2025 am 12:18 AM

Python和C 各有優勢,選擇應基於項目需求。 1)Python適合快速開發和數據處理,因其簡潔語法和動態類型。 2)C 適用於高性能和系統編程,因其靜態類型和手動內存管理。

比較和對比Mysql和Mariadb。 比較和對比Mysql和Mariadb。 Apr 26, 2025 am 12:08 AM

MySQL和MariaDB的主要區別在於性能、功能和許可證:1.MySQL由Oracle開發,MariaDB是其分支。 2.MariaDB在高負載環境中性能可能更好。 3.MariaDB提供了更多的存儲引擎和功能。 4.MySQL採用雙重許可證,MariaDB完全開源。選擇時應考慮現有基礎設施、性能需求、功能需求和許可證成本。

SQL與MySQL:澄清兩者之間的關係 SQL與MySQL:澄清兩者之間的關係 Apr 24, 2025 am 12:02 AM

SQL是一種用於管理關係數據庫的標準語言,而MySQL是一個使用SQL的數據庫管理系統。 SQL定義了與數據庫交互的方式,包括CRUD操作,而MySQL實現了SQL標準並提供了額外的功能,如存儲過程和触發器。

See all articles