4.使用python語言訪問MySQL
1)pymysql庫:Python語言訪問MySQL接口
-安裝:
在線:pip install pymysqlpython
離線:mysql
第一步:下載安裝包,下載地址:
https://pypi.org/project/PyMySQL/PyMySQL-0.9.3.tar.gzsql
第二步:解壓包,並執行安裝
tar -zxvf PyMySQL-0.9.3.tar.gz
cd PyMySQL-0.9.3
python3 setup.py install
- 驗證:進入Python交互模式,執行導入包操做
import pymysql
若是不報錯,則說明安裝成功數據庫
2)PyMySQL訪問MySQL的流程服務器
@第一步:導入pymysql模塊 import pymysql host = 'localhost' # 能夠寫ip地址 user = 'root' # 用戶名 pwd = '123456' # 密碼 dbname = 'student' # 指定數據庫 #進行數據庫的鏈接 conn = pymysql.connect(host,user,pwd,dbname) print('數據庫鏈接成功') #建立遊標對象,經過調用數據庫鏈接對象得到遊標 cursor = conn.cursor() #利用cursor對象,執行SQL語句 sql = "select * from acct" # sql語句 cursor.execute(sql) # 執行sql語句 result = cursor.fetchall()#將結果取出,並打印 print(result) cursor.close()#關閉遊標,關閉數據庫鏈接 conn.close()
3)PyMySQL模塊的主要方法
- connect: 鏈接數據庫
參數:ide
host 服務器地址
port 服務器端口(省略連默認端)
user 用戶名
passwd 密碼
db 數據庫名稱
charset 指定編碼格式fetch
- 鏈接對象支持的方法
cursor() 獲取遊標
commit() 提交事務
rollback() 回滾事務
close() 關閉遊標優化
- 遊標對象支持的方法
execute(sql) 執行SQL語句
fetchall() 取得查詢結果集中的全部數據
fetchone() 取查詢結果集中一筆數據
fetchmany(size) 取得指定筆數數據
close() 關閉遊標對象編碼
屬性:
rowcount 返回修改影響的行數spa
import pymysql from db_conf import * #導入配置 #創建到數據庫服務器的鏈接,建立鏈接對象 conn = pymysql.connect(host, user, \ password, dbname) #建立遊標對象(cursor),經過調用數據庫鏈接 #對象得到遊標 cursor = conn.cursor() #利用cursor對象,執行SQL語句 sql = "select * from acct" cursor.execute(sql) #執行SQL語句 #取出查詢結果,並打印 result = cursor.fetchall() #result是元組 for r in result: #遍歷result acct_no = r[0] #帳號 acct_name = r[1] #戶名 if r[6]: #判斷是否爲空值 balance = float(r[6]) #餘額 else: balance = 0.00 #餘額爲空設置爲0 print("帳號:%s, 戶名:%s, 餘額:%.2f" % \ (acct_no, acct_name, balance)) #關閉遊標對象 cursor.close() #關閉數據庫鏈接對象 conn.close()
示例2:插入 # pymysql的插入示例 import pymysql from db_conf import * #導入配置 try: conn = pymysql.connect(host, user, \ password, dbname) #鏈接數據庫 cursor = conn.cursor() #獲取遊標 #執行SQL語句 sql = '''insert into acct(acct_no, acct_name, cust_no, acct_type, reg_date, status, balance) values('622345000010','Robert', 'C0010', 1, date(now()), 1, 33.00)''' print(sql) cursor.execute(sql) #執行 conn.commit() #提交事務 print("Insert OK") except Exception as e: print("數據庫插入異常") print(e) finally: cursor.close() #關閉遊標 conn.close() #關閉鏈接
示例3:修改 import pymysql from db_conf import * #導入配置 try: conn = pymysql.connect(host, user, \ password, dbname) #鏈接數據庫 cursor = conn.cursor() #獲取遊標 #執行SQL語句 sql = '''update acct set balance = balance + 1000 where acct_no='622345000010' ''' cursor.execute(sql) #執行 conn.commit() #提交事務 print("修改筆數:%d" % cursor.rowcount) except Exception as e: print("數據庫修改異常") print(e) finally: cursor.close() #關閉遊標 conn.close() #關閉鏈接
示例4:刪除 # pymysql刪除示例 import pymysql from db_conf import * #導入配置 try: conn = pymysql.connect(host, user, \ password, dbname) #鏈接數據庫 cursor = conn.cursor() #獲取遊標 #執行SQL語句 sql = '''delete from acct where acct_no='622345000010' ''' cursor.execute(sql) #執行 conn.commit() #提交事務 print("刪除筆數:%d" % cursor.rowcount) except Exception as e: print("數據庫刪除異常") print(e) finally: cursor.close() #關閉遊標 conn.close() #關閉鏈接
五、sql語句優化 1)在常常查詢,排序的字段上創建索引 2)儘可能少使用不等於條件判斷,不等於等於放棄使用索引 3)少使用null判斷,null值判斷會放棄使用索引 4)條件判斷少使用or,in,not in 操做符 5)模糊查詢避免%前置 6)查詢時若是select *, 直接攜程字段名稱會提升效率 7)儘可能少在where語句中使用字段進行運算 8)數值類型的字段,進行條件比較時候,通常比字符串比較的效率更高