python/mysql connector

MySQL Connector/Python 接口 (一)

 

這裏僅介紹 MySQL 官方開發的 Python 接口,參見這裏:html

https://dev.mysql.com/doc/connector-python/en/python

Chapter 1 Introduction to MySQL Connector/Pythonmysql

這個接口是用純Python寫成的,僅依賴 Python Standard Library。sql

MySQL Connector/Python 支持如下幾點:
一、MySQL Server 版本到 5.7 及 5.7 版本的幾乎全部特性;
二、支持Python 和 MySQL 參數的數據類型之間的雙向轉換,例如 Python 的 datetime 和 MySQL 的 DATETIME;
三、MySQL 對標準的SQL語法的全部的拓展;
四、協議壓縮,這使得客戶端和服務器之間的數據流被壓縮了;
五、使用 TCP/IP sockets 創建連接,在 Unix 平臺使用 Unix sockets 創建連接;
六、使用 SSL 創建安全的 TCP/IP 連接;
七、自包含驅動程序。意味着 Connector/Python 在 Python 標準庫以外不須要 MySQL 客戶端庫程序或者任何 Python 模塊。數據庫

Chapter 2 Guidelines for Python Developers緩存

以下的設計指南覆蓋了開發 MySQL 應用程序的各個方面,可能對於有Python背景的開發人員來講不是那麼明顯。
一、出於安全性考慮,不要把鏈接、登陸到數據庫中的值硬編碼到主腳本文件中。Python 有一個 config.py 模塊的習俗,你能夠把這些值保存到這裏;
二、受到可使用的RAM的限制,Python 腳本常常在內存中構建和拆解大的數據結構。由於MySQL常常處理好幾倍大於可用內存的數據集合,能優化存儲空間和磁盤I/O的技術是尤爲重要的。例如,在MySQL 表格中,每每使用數值型IDs而不是基於字符串的詞典關鍵值,所以鍵值是緊湊的而且長度是能夠預料的。對於那些構成InnoDB表格中的Primary Key 的列,這一點是尤其重要的,由於這些列值使用第二索引值複製的;
三、全部接受輸入的應用程序必須處理壞的數據:
壞的數據多是意外的,例如值超出範圍,或者字符串格式錯誤。應用程序可使用服務器端的例如 unique constraints 和 NOT NULL constraints 的檢查,來保證壞的數據放到數據庫中。在客戶端,使用異常檢查來報告任何的問題而且採起糾正措施。安全

壞的數據也多是蓄意的,典型的表明是SQL注入攻擊。例如,輸入值容許引號,分號,「%」 和下劃線通配符字符等其餘的在SQL語句中有特殊意義的字符。驗證輸入值確保他們只有預期的字符。當把字符插入到SQL語句中轉義任何可能致使故意的行爲的字符。在未經驗證和轉義以前,永遠不要把用戶輸入的字符串插入到SQL語句中。即使是接收其餘應用程序產生的字符串,期待其餘的應用程序可能已經讓步,傳遞給你不正確的或者有害的數據。服務器

四、由於SQL查詢語句的結果集合可能很是的大,使用合適的方法在循環中遍歷獲得結果值。當你知道結果集合只有一行,fetchone() 返回一個項目;當你知道結果結合有有限的行而且可以垂手可得地放到內存中, fetchall() 返回全部的項目。當你不能決定結果集合的大小時,fetchmany() 通用方法,在循環中調用它知道結果結合沒有更多的值。markdown

五、因爲Python已經有很是方便的模塊例如 pickle 和 cPickle 用來讀取磁盤上的數據結構,相反的你選來保存到MySQL中的數據頗有可能有特殊的特徵:
1)太大以致於不能同時加載到內存中。使用 SELECT 語句來查詢你須要的精確的項目,使用聚合函數在多個項目上作計算。在 MySQL 服務器上使用選項 innodb_buffer_pool_size 來控制緩存查詢結果佔用的RAM總容量。數據結構

2)太複雜以致於不能使用一個單一的數據結構來表達。把數據拆分到不一樣的表格中。在查詢語句中使用 join 關鍵字來組個多個表格。使用 foreign key 來包保證不一樣表格之間的同步關係。

3)更新太頻繁,有多是多個用戶同時使用。更新可能只是影響數據的一小部分,可是每一次都要重寫整個數據機構就很浪費。使用 INSERT, UPDATE, DELETE 語句並行地更新不一樣的項目,只把有改變的值寫到磁盤中。使用 InnoDB 表格和事務來保證寫操做不會互相沖突,而且保證查詢語句返回的結果的一致性,即使底層數據被更新了。

六、使用 MySQL 性能最好的慣例,可以幫助你的應用程序在不須要重大的重寫或者架構調整的狀況下裁剪。它提供了SQL微調,設局庫設計,服務器配置的準則和小提示。

七、沒有必要重造輪子,使用 MySQL 的 SQL 語句作經常使用操做:查詢中的操做符,成批導入數據的技巧,等等。有一些語句和自居是對SQL標準的擴展。

八、在Python中發起SQL語句可能用到很是長的有多是多行的字符串。由於SQL語句中的字符串字面值可能用單引號括雙引號或者其中之一的括起來,爲了簡便,可使用Python的3引號機智來包裹SQL語句,例如:

"""It doesn't matter if this string contains 'single' or "double" quotes, as long as there are't 3 in a row."""

九、快速的,可擴展的 MySQL 應用程序祕訣之一,就是在設計階段最開始的使用 CREATE TABLE 語句中使用了正確的語法。例如 Oracle 推薦大多數的表格使用 ENGINE=INNODB 字句,而且從 MySQL5.5 及以上版本中都用 InnoDB 做爲默認的存儲引擎。另一個推薦值就是每一個表格使用數值型的 primary key 。

相關文章
相關標籤/搜索