1. 程式人生 > >python 操作MySQL資料庫

python 操作MySQL資料庫

銀行轉賬demo

思路:

  1. 首先要有一個表,儲存轉賬人id和錢數,收款人的id和錢數。建表參考文章末尾建立資料表,並插入資料的程式碼。
  2. 驗證兩人是否存在,驗證出款熱年錢數是否大於轉賬錢數,最後一人出款,一人收款。
  3. 因此程式碼分為兩大部分,主函式和類。類裡邊又包含各操作方法,和所有方法的呼叫執行。

知識點:

  1. python 操作資料庫,要安裝一個Python和資料庫互動的包MySQL-python,然後我們就可以使用MySQLdb這個包進行資料庫操作了。
  2. cursor() – 獲取操作遊標
  3. execute(self, nameid, money) – 執行單條sql語句,接收的引數為sql語句本身和使用的引數列表,返回值為受影響的行數
  4. fetchall() – 返回查詢到的所有記錄
  5. rollback() – 回滾當前遊標的所有操作,即當做什麼也沒發生
  6. 關閉資料庫連線 , 需要分別的關閉指標物件和連線物件.
    cursor.close() 、conn.close()
  7. 在執行完插入或刪除或修改操作後,需要呼叫一下conn.commit()方法進行提交.這樣,資料才會真正儲存在資料庫中.
#!/usr/bin/python
# Filename:three.py
import sys
import MySQLdb

#類
class hq(object):
    def __init__(self,conn):
        self.conn = conn

 #驗證兩人是否存在
def cunzai(self,nameid): cursor = self.conn.cursor() try: sql="select * from account where nameid=%s" %nameid cursor.execute(sql) print "cunzai:" + sql rs = cursor.fetchall() if len(rs) !=1: raise Exception("%s bucunzai"
% nameid) finally: cursor.close() #驗證出款人錢夠不夠 def enough_money(self,nameid,money): cursor = self.conn.cursor() try: sql = "select * from account where nameid=%s and money>%s" % (nameid,money) cursor.execute(sql) print "enough_money:" + sql rs = cursor.fetchall() if len(rs) !=1: raise Exception("%s not have enough money" % nameid) finally: cursor.close() #減錢 def reduce_money(self,nameid,money): cursor = self.conn.cursor() try: sql = "update account set money=money-%s where nameid= %s " % (money,nameid) cursor.execute(sql) print "reduce_money:" +sql if cursor.rowcount !=1: raise Exception("%s reduce money fail" % nameid) finally: cursor.close() #加錢 def add_money(self,nameid,money): cursor = self.conn.cursor() try: sql = "update account set money=money+%s where nameid= %s " % (money,nameid) cursor.execute(sql) print "add money:" + sql if cursor.rowcount !=1: raise Exception("%s add money fail" % nameid) finally: cursor.close() #觸發所有 def transfer(self,source_acctid,target_acctid,money): try: self.cunzai(source_nameid) self.cunzai(target_nameid) self.enough_money(source_nameid,money) self.reduce_money(source_nameid,money) self.add_money(target_nameid,money) self.conn.commit() except Exception as e: self.conn.rollback() raise e #如果出現異常,就回滾當前遊標的所有操作,並丟擲異常 #主函式 if __name__ == "__main__": conn = MySQLdb.Connect( host = 'localhost', port = 3306, user = 'root', passwd = '', db = 'mytest', charset = 'utf8' ) source_nameid = sys.argv[1] target_nameid = sys.argv[2] money = sys.argv[3] #從命令列中獲取三個引數分別作為出款人,收款人,轉賬金額 tr_money = hq(conn) try: tr_money.transfer(source_nameid,target_nameid,money) except Exception as e: print "yichang" , str(e) finally: conn.close()

命令列程式碼如下(例如該檔名稱為test . py):

$ python test.py  1   2   100
#1給2轉賬100

建立資料表,並插入資料

#連線資料庫
conn = MySQLdb.Connect(
                        host = 'localhost',
                        port = 3306,
                        user = 'root',
                        passwd = '',
                        db = 'mytest',
                        charset = 'utf8'
                        )

cursor = conn.cursor()
#建立一個表儲存資料
sql_create = "create table if not exists account(nameid int, money  varchar(100)) "
#插入兩條資料
sql_insert1 = "insert into account(nameid,money) values(13,120)"
sql_insert2 = "insert into account(nameid,money) values(14,10)"
#執行上述sql語句
cursor.execute(sql_create)
cursor.execute(sql_insert1)
cursor.execute(sql_insert2)
conn.close()

參考慕課網python教程
如果您有什麼問題或建議,歡迎留言…^.^