PymySQL

一,mysql基礎

關於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

 

二,pymysql

MySQLdb是在python2時一個處理mysql的模塊,和pymsql相似htm

 

安裝:

pip3 install pymysql

 

1,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()

  

2,獲取新建立數據自增ID

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)

  

3,獲取查詢數據

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)
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息