python MySQL 基本操作

今天在寫爬蟲時(shí)候狂魔,爬完數(shù)據(jù)進(jìn)行保存時(shí)候,不知道選擇何種數(shù)據(jù)庫以及如何操作淫痰,在網(wǎng)上找了一堆資料最楷,結(jié)合自己需要,寫下這邊日記,方便后面自己回想籽孙,這里推薦一個(gè)博主寫的烈评,個(gè)人比較完善,有興趣的可以去學(xué)習(xí)一波

http://www.reibang.com/p/4e72faebd27f
數(shù)據(jù)庫選擇
目前犯建,數(shù)據(jù)庫主要有兩種形式讲冠,一種是非關(guān)系型數(shù)據(jù)庫,另一種是關(guān)系型數(shù)據(jù)庫适瓦。目前竿开,我們用得非常廣泛的一種數(shù)據(jù)庫類型是關(guān)系型數(shù)據(jù)庫,它可以分為以下幾種:
Oracle:
付費(fèi)產(chǎn)品玻熙,主要是銀行在用(萬一出錯(cuò)了有Oracle背鍋)
SQL Sever:
付費(fèi)產(chǎn)品否彩,微軟產(chǎn)品,windows專用
PostgreSQL:
免費(fèi)產(chǎn)品嗦随,主要是高校學(xué)術(shù)上使用
MySQL:
大眾列荔,免費(fèi),開源枚尼,不過現(xiàn)在被Oracle 收購了贴浙,以后不知道會(huì)不會(huì)收費(fèi),趁著現(xiàn)在免費(fèi)先用著吧
術(shù)語
數(shù)據(jù)庫: 數(shù)據(jù)庫是一些關(guān)聯(lián)表的集合姑原。
數(shù)據(jù)表: 表是數(shù)據(jù)的矩陣悬而。在一個(gè)數(shù)據(jù)庫中的表看起來像一個(gè)簡單的電子表格。
列: 一列(數(shù)據(jù)元素) 包含了相同類型的數(shù)據(jù), 例如郵政編碼的數(shù)據(jù)锭汛。
行:一行(=元組,或記錄)是一組相關(guān)的數(shù)據(jù)袭蝗,例如一條用戶訂閱的數(shù)據(jù)唤殴。
冗余:存儲(chǔ)兩倍數(shù)據(jù),冗余降低了性能到腥,但提高了數(shù)據(jù)的安全性朵逝。
主鍵:主鍵是唯一的。一個(gè)數(shù)據(jù)表中只能包含一個(gè)主鍵乡范。你可以使用主鍵來查詢數(shù)據(jù)配名。
外鍵:外鍵用于關(guān)聯(lián)兩個(gè)表。
復(fù)合鍵:復(fù)合鍵(組合鍵)將多個(gè)列作為一個(gè)索引鍵晋辆,一般用于復(fù)合索引渠脉。
索引:使用索引可快速訪問數(shù)據(jù)庫表中的特定信息。索引是對(duì)數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)瓶佳。類似于書籍的目錄芋膘。
MySQL 安裝
這里不再贅述,網(wǎng)上資料很多,這里給個(gè)鏈接为朋,可以去學(xué)習(xí):https://www.runoob.com/mysql/mysql-install.html

Python 連接

驅(qū)動(dòng)安裝

目前臂拓,關(guān)于Python操作數(shù)據(jù)庫主要有以下幾種方法,通過模塊調(diào)用:

MySQLdb的使用
MySQLdb是用于Python連接MySQL數(shù)據(jù)庫的接口习寸,它實(shí)現(xiàn)了Python數(shù)據(jù)庫API規(guī)范V2.0胶惰,基于MySQL C API上建立的,目前只支持Python2.x霞溪。

PyMySQL的使用
PyMySQL是Python中用于連接MySQL服務(wù)器的一個(gè)庫孵滞,它支持Python3.x,是一個(gè)純Python寫的MySQL客戶端威鹿,它的目標(biāo)是替代MySQLdb剃斧。PyMySQL在MIT許可下發(fā)布。

mysql.connector
由于 MySQL 服務(wù)器以獨(dú)立的進(jìn)程運(yùn)行忽你,并通過網(wǎng)絡(luò)對(duì)外服務(wù)幼东,所以,需要支持 Python 的 MySQL 驅(qū)動(dòng)來連接到 MySQL 服務(wù)器科雳。

目前根蟹,有兩個(gè) MySQL 驅(qū)動(dòng):

mysql-connector-python:是 MySQL 官方的純 Python 驅(qū)動(dòng)
mysql-connector :不建議這個(gè),8.0以下會(huì)提示“authentication plugin 'calling_sha2_password' is not supported”
SQLAlchem
是一種ORM(Object-Relational Mapping)框架糟秘,將關(guān)系數(shù)據(jù)庫的表結(jié)構(gòu)映射到對(duì)象上简逮,隱藏了數(shù)據(jù)庫操作背后的細(xì)節(jié),簡化了數(shù)據(jù)操作尿赚。

數(shù)據(jù)庫連接

import mysql.connector  # 導(dǎo)包
#連接數(shù)據(jù)庫
    mydb = mysql.connector.connect(
        host="localhost",
        user="root",
        passwd="Pass1234",
        database="cnblog"
    )
    mycursor = mydb.cursor()  #游標(biāo)
# 檢查一個(gè)表是否存在  
def tableExists(mycursor, name):  
    stmt = "SHOW TABLES LIKE '"+name+"'"  
    mycursor.execute(stmt)  
    return mycursor.fetchone()     
# 刪除一個(gè)表(無論它是否已經(jīng)存在)  
def dropTable(mycursor, name):  
    stmt = "DROP TABLE IF EXISTS "+name  
    mycursor.execute(stmt)  
# buffered=True 不設(shè)的話散庶,查詢結(jié)果沒有讀完會(huì)報(bào)錯(cuò)  
# raise errors.InternalError("Unread result found")  
mycursor = mydb.cursor(buffered=True)  
# 刪除臨時(shí)表  
tableName = 'tmp'  
dropTable(mycursor, tableName)  
# 創(chuàng)建一個(gè)表       
mycursor.execute("CREATE TABLE user (id INT AUTO_INCREMENT PRIMARY KEY,\
                               name VARCHAR(255), address VARCHAR(255), \  
                               sex VARCHAR(225), age INT(10))")

增、刪凌净、查悲龟、改

1增 (用的是"INSERT INTO"語句)


# 往表里插入一條記錄  
sql="INSERT INTO user (name,address,sex,age) VALUES(%s, %s,%s,%s)"
val = ("xiaoming", "beijing","M",23)  
mycursor.execute(sql, val)    # 這里

# 往表里插入多條記錄  
val=[("xiaolan","shanghai","M",35),  
     ("xinyi","hefei","M",28),  
     ("jide","nanjing","F",30)
    ]  
mycursor.executemany(sql, val)   # many
# 提交
mydb.commit()  

2刪 DELETE

包含兩部分 ,刪除表格和刪除表記錄

#刪除名字為xiaoming的表記錄  
sql="DELETE FROM  user WHERE name='xiaoming'"  
mycursor.execute(sql)  
mydb.commit()  

# 刪除表格
sql= "DROP TABLE IF EXISTS user"  
mycursor.execute(sql)  
mydb.commit()  

3查 SELECT

這是用的最多的功能冰寻,包含普通查詢须教、條件查詢、聚合查詢等
例如:

#查詢這里面所有的人:  
sql="SELECT * FROM user"  
mycursor.execute(sql)  
myresult = mycursor.fetchall()     # fetchall()表示的是獲得所有記錄斩芭;fetchone()表示只獲取一條數(shù)據(jù)轻腺;fetchmany(size=2)表示獲取兩條記錄
for x in myresult:  
  print(x)  

# 條件查詢WHERE 
sql="SELECT * FROM user WHERE age > 30"  
mycursor.execute(sql)  
myresult = mycursor.fetchall()     # fetchall() 獲取所有記錄  
for x in myresult:  
  print(x)  

# 模糊搜索查詢 LIKE 
#%代表零個(gè)、一個(gè)或者多個(gè)數(shù)字或字符  
#_代表一個(gè)單一的數(shù)字或者字符  
sql = "SELECT * FROM user WHERE name LIKE '%t%'"  
mycursor.execute(sql)  
myresult=mycursor.fetchall()  
for x in myresult:  
    print(x)  

# 限制性排序查詢 LIMIT
#找出其中年齡最大的3個(gè)人  
sql = "SELECT * FROM user ORDER BY age  DESC LIMIT 3"  
mycursor.execute(sql)  
myresult=mycursor.fetchall()  
for x in myresult:  
    print(x)  

4修改表記錄 UPDATE


# 將xiaoming改為huiyuanai
sql="UPDATE customers SET name='huiyuanai' WHERE name ='xiaoming'"  
mycursor.execute(sql)  
mydb.commit()  

本文介紹了Python+MySQL的基本操作划乖,包括如何創(chuàng)建連接以及對(duì)數(shù)據(jù)庫進(jìn)行增刪改查等操作贬养。但是,本文涉及到的只是對(duì)單表進(jìn)行操作迁筛,只是數(shù)據(jù)庫操作的冰山一角煤蚌;在實(shí)際的開發(fā)和工作環(huán)境中耕挨,需要根據(jù)實(shí)際內(nèi)容對(duì)多表進(jìn)行操作.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市尉桩,隨后出現(xiàn)的幾起案子筒占,更是在濱河造成了極大的恐慌,老刑警劉巖蜘犁,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翰苫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡这橙,警方通過查閱死者的電腦和手機(jī)奏窑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屈扎,“玉大人埃唯,你說我怎么就攤上這事∮コ浚” “怎么了墨叛?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長漠趁。 經(jīng)常有香客問我,道長忍疾,這世上最難降的妖魔是什么闯传? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮卤妒,結(jié)果婚禮上甥绿,老公的妹妹穿的比我還像新娘。我一直安慰自己则披,他們只是感情好妹窖,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著收叶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪共苛。 梳的紋絲不亂的頭發(fā)上判没,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音隅茎,去河邊找鬼澄峰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛辟犀,可吹牛的內(nèi)容都是我干的俏竞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼魂毁!你這毒婦竟也來了玻佩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤席楚,失蹤者是張志新(化名)和其女友劉穎咬崔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烦秩,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垮斯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了只祠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兜蠕。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖抛寝,靈堂內(nèi)的尸體忽然破棺而出熊杨,到底是詐尸還是另有隱情,我是刑警寧澤墩剖,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布猴凹,位于F島的核電站,受9級(jí)特大地震影響岭皂,放射性物質(zhì)發(fā)生泄漏郊霎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一爷绘、第九天 我趴在偏房一處隱蔽的房頂上張望书劝。 院中可真熱鬧,春花似錦土至、人聲如沸购对。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骡苞。三九已至,卻和暖如春楷扬,著一層夾襖步出監(jiān)牢的瞬間解幽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工烘苹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躲株,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓镣衡,卻偏偏與公主長得像霜定,于是被迫代替她去往敵國和親档悠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容