關於mysql的操做,能夠參考下面的博客。http://www.cnblogs.com/wupeiqi/articles/5699254.htmlhtml
除了對mysql的CURD操做之外【建立(Create)、更新(Update)、讀取(Retrieve)和刪除(Delete)操做)】
還要注意幾個點:python
1,自增列mysql
自增,若是爲某列設置自增列,插入數據時無需設置此列,默認將自增(表中只能有一個自增列
auto_incrementsql
2,主鍵(至關於書的目錄) primary key數據庫
3,外鍵 foreign key (另一張表裏面的鍵,爲了進行更好的關聯,進行表與表的一一對應)
好比兩張資源表分別爲:
T1,(id, 服務器/防火牆, 價格)
T2, (1(服務器)/2(防火牆),廠商)
此時就能夠在T1中增長一個外鍵,分別把服務器和防火牆替換成1和2。由於在T2表中,1表示服務器,2表示防火牆
另一點使用外鍵須要注意:外鍵具備約束性。即不能在T1中有1和2的那一列增長3,由於T2中也沒有3,不然會報錯!
服務器
4,區別:一對多,多對多(表與表之間的關聯)
若是用到一對多,其中外鍵就能夠作到。若是用到了多對多,最合理的設計應該是創建第三表專門保存對應關係。fetch
5,連表操做
簡單粗暴的連表
inner join
left join
right join
例1.
select * from t10 left join t11 on t10.type_id = t11.id
他們之間的區別就是:
inner join只把相關聯的列出來。
left join是以左邊爲主,把相關聯的列出來,若是左邊有其餘無關的數據,也會列出來,並置爲None
right join和left join相反。設計
union 對多個表進行拼接。
注意:union默認會自動去重。若是不想讓其自動去重,則須要用Union allserver
MySQLdb是在python2時一個處理mysql的模塊,和pymsql相似htm
pip3 install pymysql
import pymysql # 建立鏈接 conn = pymysql.connect(host='10.1.1.3', port=3306, user='root', passwd='123', db='s13') # 建立遊標 cursor = conn.cursor() # 執行SQL,並返回收影響行數 effect_row = cursor.execute("update hosts set host = '1.1.1.2'") # 執行SQL,並返回受影響行數 # effect_row = cursor.execute("update hosts set host = '1.1.1.2' where nid > %s", (1,)) # 執行SQL,並返回受影響行數 # effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)]) # 能夠進行多行的修改 # 提交,否則沒法保存新建或者修改的數據,這一步相當重要能夠把內存中數據更新到數據庫 conn.commit() # 關閉遊標 cursor.close() # 關閉鏈接 conn.close()
import pymysql conn = pymysql.connect(host='10.1.1.3', port=3306, user='root', passwd='123', db='s13') cursor = conn.cursor() cursor.executemany("insert into t5(name, price)values(%s,%s)", [("server4", 21000), ("server5", 15000)]) conn.commit() cursor.close() conn.close() # 獲取最新自增ID new_id = cursor.lastrowid print(new_id)
import pymysql conn = pymysql.connect(host='10.1.1.3', port=3306, user='root', passwd='123', db='s13') cursor = conn.cursor() cursor.execute("select * from t5") # 獲取第一行數據 # row_1 = cursor.fetchone() # 獲取前n行數據 # row_2 = cursor.fetchmany(3) # 獲取全部數據 row_3 = cursor.fetchall() conn.commit() cursor.close() conn.close() print(row_3) 注意:在fetch數據時按照順序進行,可使用cursor.scroll(num,mode)來移動遊標位置,如: cursor.scroll(1,mode='relative') # 相對當前位置移動 cursor.scroll(2,mode='absolute') # 相對絕對位置移動 這點和讀取文件相似,若是執行兩遍讀取第一行,那麼實際上第一次讀取的是第一行,第二次是緊接着第一次讀取的下一行。
4,fetch數據類型
fetch查詢默認讀取的數據類型爲元組,有時候不太好辨認。這時能夠修改輸出爲字典。
import pymysql conn = pymysql.connect(host='10.1.1.3', port=3306, user='root', passwd='123', db='s13') # 遊標設置爲字典類型 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) r = cursor.execute("select * from t1;") result = cursor.fetchone() conn.commit() cursor.close() conn.close() print(result)