python操做mysql數據庫練習

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
相關文章
相關標籤/搜索