python操做mysql數據庫練習python
本次練習是在windows下,mysql版本爲5.7,python版本爲2.7.5,集成環境爲pycharm。mysql
建立表時,enign在innodb下支持事務,其餘可能不支持。sql
create table account( accid int(11) default null , money int(11) default null )engine=innodb;
1、測試環境數據庫
1 #coding=utf-8 2 import MySQLdb 3 4 conn=MySQLdb.connect(host='127.0.0.1',port=3306,user='root',passwd='771994001o',db='immc',charset='utf8') 5 cursor=conn.cursor() 6 7 print conn 8 print cursor 9 10 cursor.close() 11 conn.close()
2、相關函數windows
#支持execute()執行一個數據庫查詢命令,執行sql,將結果從數據庫放回到客戶端
#fetchon()取結果集的下一行,移動rownumbr,返回數據
# fetchmany()取結果集的下幾行
# fetchall()取結果集中的剩餘全部行
# rowcount()最近一次execute返回數據的行數或影響行數
# close()關閉遊標對象
3、使用select查詢數據函數
1 conn=MySQLdb.connect(host='127.0.0.1',port=3306,user='root',passwd='771994001o',db='immc',charset='utf8') 2 cursor=conn.cursor() 3 4 sql="select * from manager" 5 cursor.execute(sql) 6 print cursor.rowcount 7 8 rs=cursor.fetchone() 9 print rs 10 print rs[1] 11 12 rs=cursor.fetchmany(3) 13 print rs 14 15 rs=cursor.fetchall() 16 print rs 17 18 cursor.close() 19 conn.close() 20 21 22 conn=MySQLdb.connect(host='127.0.0.1',port=3306,user='root',passwd='771994001o',db='immc',charset='utf8') 23 cursor=conn.cursor() 24 25 sql="select * from manager" 26 cursor.execute(sql) 27 28 rs=cursor.fetchall() 29 for row in rs: 30 print "UserId:%s,UserName:%s" %row 31 32 cursor.close() 33 conn.close()
4、更新數據庫測試
1 conn=MySQLdb.connect(host='127.0.0.1',port=3306,user='root',passwd='771994001o',db='immc',charset='utf8') 2 cursor=conn.cursor() 3 4 sql_insert="insert into manager values(10010,'李隆基')" 5 sql_update="update manager set name='李開' where id=10023" 6 sql_delete="delete from manager where d<1003" 7 8 try: 9 cursor.execute(sql_insert) 10 print cursor.rowcount 11 cursor.execute(sql_update) 12 print cursor.rowcount 13 cursor.execute(sql_delete) 14 print cursor.rowcount 15 except Exception as e: 16 print e 17 conn.rollback() 18 19 conn.commit() 20 21 cursor.close() 22 conn.close()
5、實例演練fetch
開始事務-檢測A和B帳戶是否可用-檢測帳戶A是否有100塊-帳戶A減去100快,帳戶B加上100塊-提交事務
1 import sys 2 class TransfrMoney(object): 3 def __init__(self,conn): 4 self.conn=conn 5 def transfer(self,source_accid,target_accid,money): 6 try: 7 self.check_acct_available(source_accid) 8 self.check_acct_available(target_accid) 9 self.enough_moner(source_accid,money) 10 self.reduce_money(source_accid,money) 11 self.add_money(target_accid,money) 12 self.conn.commit() 13 except Exception as e: 14 self.conn.rollback() 15 raise e 16 17 def check_acct_available(self,accid): 18 cursor = self.conn.cursor() 19 try: 20 sql = "select * from account where accid=%s" % accid 21 cursor.execute(sql) 22 print "check_acct_available:"+sql 23 rs = cursor.fetchall() 24 if len(rs) != 1: 25 raise Exception("帳號%s不存在" % accid) 26 finally: 27 cursor.close() 28 29 def enough_moner(self,accid, money): 30 cursor = self.conn.cursor() 31 try: 32 sql = "select * from account where accid=%s and money >=%s" %(accid,money) 33 cursor.execute(sql) 34 print "enough_moner:" + sql 35 rs = cursor.fetchall() 36 if len(rs) != 1: 37 raise Exception("帳號%s沒有足夠的錢" % accid) 38 finally: 39 cursor.close() 40 def reduce_money(self,accid,money): 41 cursor = self.conn.cursor() 42 try: 43 sql = "update account set money =money-%s where accid=%s" % (money, accid) 44 cursor.execute(sql) 45 print "reduce_money:" + sql 46 rs = cursor.fetchall() 47 if cursor.rowcount != 1: 48 raise Exception("帳號%s減款失敗" % accid) 49 finally: 50 cursor.close() 51 def add_money(self,accid,money): 52 cursor = self.conn.cursor() 53 try: 54 sql = "update account set money =money+%s where accid=%s" % (money, accid) 55 cursor.execute(sql) 56 print "add_money:" + sql 57 rs = cursor.fetchall() 58 if cursor.rowcount != 1: 59 raise Exception("帳號%s加款失敗" % accid) 60 finally: 61 cursor.close() 62 63 if __name__=="__main__": 64 source_accid=sys.argv[1] 65 target_accid=sys.argv[2] 66 money=sys.argv[3] 67 68 conn=MySQLdb.connect(host='127.0.0.1',port=3306,user='root',passwd='771994001o',db='immc',charset='utf8') 69 tr_money=TransfrMoney(conn) 70 try: 71 tr_money.transfer(source_accid,target_accid,money) 72 except Exception as e: 73 print "出現問題"+str(e) 74 finally: 75 conn.close()
點擊run——Edit Configuratopn...---Scrip parameters選項輸入測試數據。spa
2017-03-13 16:58:35