python 操作MySQL資料庫
阿新 • • 發佈:2019-01-24
銀行轉賬demo
思路:
- 首先要有一個表,儲存轉賬人id和錢數,收款人的id和錢數。建表參考文章末尾建立資料表,並插入資料的程式碼。
- 驗證兩人是否存在,驗證出款熱年錢數是否大於轉賬錢數,最後一人出款,一人收款。
- 因此程式碼分為兩大部分,主函式和類。類裡邊又包含各操作方法,和所有方法的呼叫執行。
知識點:
- python 操作資料庫,要安裝一個Python和資料庫互動的包MySQL-python,然後我們就可以使用MySQLdb這個包進行資料庫操作了。
- cursor() – 獲取操作遊標
- execute(self, nameid, money) – 執行單條sql語句,接收的引數為sql語句本身和使用的引數列表,返回值為受影響的行數
- fetchall() – 返回查詢到的所有記錄
- rollback() – 回滾當前遊標的所有操作,即當做什麼也沒發生
- 關閉資料庫連線 , 需要分別的關閉指標物件和連線物件.
cursor.close() 、conn.close() - 在執行完插入或刪除或修改操作後,需要呼叫一下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教程
如果您有什麼問題或建議,歡迎留言…^.^