標籤:資料庫查詢 關閉 connect gpo 復原 print usr 使用者 ogr
python2.x使用MySQLdb
python3.x使用pymysql代替MySQLdb
不過我使用的是python3.5,MySQLdb還是可以在python3.5使用的。
1 #!/usr/bin/env python 2 # _*_ coding:utf-8 _*_ 3 import pymysql 4 import MySQLdb 5 6 # 開啟資料庫連接 7 db = pymysql.connect("10.35.22.91", "root", "adminadmin", "TESTDB") 8 ‘‘‘ 9 db = MySQLdb.connect(host=‘10.35.22.91‘, 10 user=‘root‘, 11 port = 3306, 12 passwd =‘adminadmin‘, 13 db=‘scrapydb‘, 14 charset=‘utf8‘) 15 ‘‘‘ 16 # 使用 cursor() 方法建立一個遊標對象 cursor 17 cursor = db.cursor() 18 19 # 使用 execute() 方法執行 SQL,如果表存在則刪除 20 cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") 21 # 使用預先處理語句建立表 22 sql = """CREATE TABLE EMPLOYEE ( 23 FIRST_NAME CHAR(20) NOT NULL, 24 LAST_NAME CHAR(20), 25 AGE INT, 26 SEX CHAR(1), 27 INCOME FLOAT )""" 28 cursor.execute(sql) 29 30 # SQL 插入語句 31 sql = """INSERT INTO EMPLOYEE(FIRST_NAME, 32 LAST_NAME, AGE, SEX, INCOME) 33 VALUES (‘Mac‘, ‘Mohan‘, 20, ‘M‘, 2000)""" 34 ‘‘‘ 35 # SQL 插入語句第二種方式 36 sql = "INSERT INTO EMPLOYEE(FIRST_NAME, 37 LAST_NAME, AGE, SEX, INCOME) 38 VALUES (‘%s‘, ‘%s‘, ‘%d‘, ‘%c‘, ‘%d‘ )" % 39 (‘Mac‘, ‘Mohan‘, 20, ‘M‘, 2000) 40 ‘‘‘ 41 try: 42 # 執行sql語句 43 cursor.execute(sql) 44 # 提交到資料庫執行 45 db.commit() 46 except: 47 # 如果發生錯誤則復原 48 db.rollback() 49 50 ‘‘‘ 51 資料庫查詢操作 52 Python查詢Mysql使用 fetchone() 方法擷取單條資料, 使用fetchall() 方法擷取多條資料。 53 fetchone(): 該方法擷取下一個查詢結果集。結果集是一個對象 54 fetchall(): 接收全部的返回結果行. 55 rowcount: 這是一個唯讀屬性,並返回執行execute()方法後影響的行數 56 ‘‘‘ 57 # SQL 查詢語句 58 sql = "SELECT * FROM EMPLOYEE 59 WHERE INCOME > ‘%d‘" % (1000) 60 try: 61 # 執行SQL語句 62 cursor.execute(sql) 63 #print(cursor.rowcount) 64 # 擷取所有記錄列表 65 results = cursor.fetchall() 66 for row in results: 67 fname = row[0] 68 lname = row[1] 69 age = row[2] 70 sex = row[3] 71 income = row[4] 72 # 列印結果 73 print ("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % 74 (fname, lname, age, sex, income )) 75 except: 76 print ("Error: unable to fetch data") 77 78 # 資料庫更新操作 79 # SQL 更新語句 80 sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = ‘%c‘" % (‘M‘) 81 try: 82 # 執行SQL語句 83 cursor.execute(sql) 84 # 提交到資料庫執行 85 db.commit() 86 except: 87 # 發生錯誤時復原 88 db.rollback() 89 90 # 資料庫刪除操作 91 # SQL 刪除語句 92 sql = "DELETE FROM EMPLOYEE WHERE AGE > ‘%d‘" % (20) 93 try: 94 # 執行SQL語句 95 cursor.execute(sql) 96 # 提交修改 97 db.commit() 98 except: 99 # 發生錯誤時復原100 db.rollback()101 102 # 關閉資料庫連接103 db.close()104 ‘‘‘105 # 使用 execute() 方法執行 SQL 查詢106 #cursor.execute("SELECT VERSION()")107 108 # 使用 fetchone() 方法擷取單條資料data產生器.109 data = cursor.fetchone()110 111 print("Database version : %s " % data)112 113 # 關閉資料庫連接114 db.close()115 ‘‘‘錯誤處理
DB API中定義了一些資料庫操作的錯誤及異常,下表列出了這些錯誤和異常:
| 異常 |
描述 |
| Warning |
當有嚴重警告時觸發,例如插入資料是被截斷等等。必須是 StandardError 的子類。 |
| Error |
警告以外所有其他錯誤類。必須是 StandardError 的子類。 |
| InterfaceError |
當有資料庫介面模組本身的錯誤(而不是資料庫的錯誤)發生時觸發。 必須是Error的子類。 |
| DatabaseError |
和資料庫有關的錯誤發生時觸發。 必須是Error的子類。 |
| DataError |
當有資料處理時的錯誤發生時觸發,例如:除零錯誤,資料超範圍等等。 必須是DatabaseError的子類。 |
| OperationalError |
指非使用者控制的,而是操作資料庫時發生的錯誤。例如:串連意外斷開、 資料庫名未找到、交易處理失敗、記憶體配置錯誤等等操作資料庫是發生的錯誤。 必須是DatabaseError的子類。 |
| IntegrityError |
完整性相關的錯誤,例如外鍵檢查失敗等。必須是DatabaseError子類。 |
| InternalError |
資料庫的內部錯誤,例如遊標(cursor)失效了、事務同步失敗等等。 必須是DatabaseError子類。 |
| ProgrammingError |
程式錯誤,例如資料表(table)沒找到或已存在、SQL語句語法錯誤、 參數數量錯誤等等。必須是DatabaseError的子類。 |
| NotSupportedError |
不支援錯誤,指使用了資料庫不支援的函數或API等。例如在連線物件上 使用.rollback()函數,然而資料庫並不支援事務或者事務已關閉。 必須是DatabaseError的子類。 |
python筆記二(mysql資料庫操作)