第十八章 Python3 操作 MySQL

本文鏈接:http://www.reibang.com/p/50ba66cd335a
作者:西瓜甜

一、基本介紹

Python3 操作 MySQL 數(shù)據(jù)庫 可以使用的模塊是 pymysqlMySQLdb佃迄。

這個(gè)兩個(gè)模塊都是通過自己的 API 執(zhí)行原生的 SQL 語句實(shí)現(xiàn)的夫否。

MySQLdb 是最早出現(xiàn)的一個(gè)操作 MySQL 數(shù)據(jù)庫的模塊膊毁,核心由C語言編寫,接口精煉,性能最棒惰帽,缺點(diǎn)是環(huán)境依賴較多,安裝稍復(fù)雜父虑,特別是 windows 中不好安裝该酗。更新較慢。

pymysql 為替代 MySQLdb 而生,純 Python 實(shí)現(xiàn)呜魄,API 的接口與 MySQLdb 完全兼容悔叽,安裝方便。

二爵嗅、 安裝包 pymysql

1 方案一 pymsql

pymsql是Python中操作MySQL的模塊

shell> pip3 install pymysql

基本使用

import pymysql

# 獲取連接到 DB 的對(duì)象
db = pymysql.connect(host='172.16.153.10',
                       port=3306,
                       user='root',
                       passwd='123', 
                       db='shark_db',
# 獲取游標(biāo)娇澎,之后使用游標(biāo)操作表
cursor = conn.cursor()

2 方案2 mysqlclient

安裝 mysqlclient

適用于 Centos7

安裝系統(tǒng)依賴庫和編譯器

yum   install   mariadb-devel   gcc   
  • 如果是系統(tǒng)自帶的 python2環(huán)境,安裝 Python2 依賴庫
python-devel
  • 如果是 python3環(huán)境睹晒,編譯安裝 python3 后就不用再操作了

安裝 mysqlclient

pip   install   mysqlclient

基本使用

import MySQLdb

# 獲取連接到 DB 的對(duì)象
db=MySQLdb.connect(host='172.16.153.10',passwd="moonpie",db="thangs")

# 獲取游標(biāo)趟庄,之后使用游標(biāo)操作表
c=db.cursor()

三、 基本操作

1 創(chuàng)建表

import pymysql
  
# 創(chuàng)建連接
conn = pymysql.connect(host='172.16.153.10',
                       port=3306,
                       user='root',
                       passwd='123', 
                       db='shark_db',
                       charset='utf8mb4')
# 獲取游標(biāo)對(duì)象
cursor = conn.cursor()

# 定義 sql 語句
create_table_sql = """create table t1
 (id int auto_increment primary key, 
  name varchar(10) not null, 
  age int not null)"""

# 執(zhí)行 sql 語句
cursor.execute(create_table_sql)
  
# 提交更改
conn.commit()

# 關(guān)閉游標(biāo)對(duì)象
cursor.close()

# 關(guān)閉連接對(duì)象
conn.close()

2 插入數(shù)據(jù)

一次插入一條數(shù)據(jù)

一次插入一條數(shù)據(jù), 并且使用變量占位符
insert_data_sql = "insert into t1(name, age) values(%s, %s);"
row = cursor.execute(insert_data_sql, ('shark', 18))

conn.commit()
cursor.close()
conn.close()

一次插入多條數(shù)據(jù)

定義插入數(shù)據(jù)的語句
many_sql = "insert into t1 (name, age) values(%s, %s)"

一次插入多條數(shù)據(jù)
row = cursor.executemany(many_sql, [('shark1', 18),('xiguatian', 20),('qf', 8)])

conn.commit()
cursor.close()
conn.close()

3 查詢數(shù)據(jù)

3.1 獲取到的數(shù)據(jù)是元組類型

定義一個(gè)查詢語句
query_sql = "select id,name,age from t1 where name=%s;"

執(zhí)行查詢語句伪很,并且返回得到結(jié)果的行數(shù)
row_nums = cursor.execute(query_sql, ('shark1'))

"""
獲取到數(shù)據(jù)結(jié)果集具有迭代器的特性:
1. 可以通過索引取值戚啥,可以切片
2. 結(jié)果集中的數(shù)據(jù)每次取出一條就少一條
"""

獲取結(jié)果集中的第一條數(shù)據(jù), 注意不是整個(gè)表的第一條數(shù)據(jù)
one_data = cursor.fetchone()

獲取結(jié)果集中接下來的第 2 條和 第 3 條 數(shù)據(jù)
many_data = cursor.fetchmany(2)

獲取結(jié)果集中剩余的全部數(shù)據(jù) 
all_data = cursor.fetchall()

cursor.close()
conn.close()
print(row_nums)
print(one_data)
print(many_data)
print(all_data)

3.2 獲取到的數(shù)據(jù)是字典類型的

游標(biāo)設(shè)置為字典類型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

query_sql = "select id,name,age from t1 where name=%s;"

row_nums = cursor.execute(query_sql, ('shark1'))

獲取結(jié)果的操作和之前的一樣
result = cursor.fetchone()
conn.commit()
cursor.close()
conn.close()

print(result)

4. 操作存儲(chǔ)過程(擴(kuò)展自修)

無參數(shù)存儲(chǔ)過程

cursor.callproc('p1')  #等價(jià)于cursor.execute("call p1()")

有參存儲(chǔ)過程

cursor.callproc('p2', args=(1, 22, 3, 4))

#獲取執(zhí)行完存儲(chǔ)的參數(shù),參數(shù)@開頭
cursor.execute("select @p2,@_p2_1,@_p2_2,@_p2_3")  #{'@_p2_1': 22, '@p2': None, '@_p2_2': 103, '@_p2_3': 24}


row_1 = cursor.fetchone()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末是掰,一起剝皮案震驚了整個(gè)濱河市虑鼎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌键痛,老刑警劉巖炫彩,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異絮短,居然都是意外死亡江兢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門丁频,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杉允,“玉大人,你說我怎么就攤上這事席里∈辶祝” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵奖磁,是天一觀的道長改基。 經(jīng)常有香客問我,道長咖为,這世上最難降的妖魔是什么秕狰? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮躁染,結(jié)果婚禮上鸣哀,老公的妹妹穿的比我還像新娘。我一直安慰自己吞彤,他們只是感情好我衬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般低飒。 火紅的嫁衣襯著肌膚如雪许昨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天褥赊,我揣著相機(jī)與錄音糕档,去河邊找鬼。 笑死拌喉,一個(gè)胖子當(dāng)著我的面吹牛速那,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尿背,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼端仰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了田藐?” 一聲冷哼從身側(cè)響起荔烧,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎汽久,沒想到半個(gè)月后鹤竭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡景醇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年臀稚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片三痰。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吧寺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出散劫,到底是詐尸還是另有隱情稚机,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布获搏,位于F島的核電站抒钱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏颜凯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一仗扬、第九天 我趴在偏房一處隱蔽的房頂上張望症概。 院中可真熱鬧,春花似錦早芭、人聲如沸彼城。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽募壕。三九已至调炬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舱馅,已是汗流浹背缰泡。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留代嗤,地道東北人棘钞。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像干毅,于是被迫代替她去往敵國和親宜猜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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

  • 一硝逢、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 5,744評(píng)論 0 10
  • 本文我們?yōu)榇蠹医榻B Python3 使用PyMySQL連接數(shù)據(jù)庫姨拥,并實(shí)現(xiàn)簡單的增刪改查。 什么是 PyMySQL渠鸽?...
    david_6522閱讀 490評(píng)論 0 1
  • 1.導(dǎo)出整個(gè)數(shù)據(jù)庫 mysqldump -u 用戶名 -p –default-character-set=lati...
    往你頭上敲三下閱讀 603評(píng)論 1 10
  • 人工智能周報(bào)叫乌,為大家?guī)砣虼髷?shù)據(jù)產(chǎn)業(yè)及周邊行業(yè)最新的咨詢動(dòng)態(tài)以及領(lǐng)袖觀點(diǎn)。期待和大家一起不斷找到海外數(shù)據(jù)技術(shù)和方...
    Tinadu閱讀 281評(píng)論 0 0
  • 聽易經(jīng)早課收獲 1.在集體里拱绑,沒有對(duì)錯(cuò)之分综芥,跟著集體的步調(diào)走,集體讀經(jīng)猎拨,大家統(tǒng)一膀藐。世界本無亊,庸人自擾之红省。真正的英...
    倪梓睿閱讀 167評(píng)論 0 0