Python連接MySQL的幾種方式

目前凫岖,常見的Python連接MySQL主要有以下幾種方式:SQLAlchemy,PyMySQL晒哄,peewee购啄,MySQLdb(只支持Python2.x襟企,已基本廢棄)MySQLclient等,下面我們分別做相應(yīng)介紹狮含。

1顽悼、PyMySQL
安裝方式簡單,同時(shí)也兼容 MySQL-python几迄,功能強(qiáng)大表蝙,它的運(yùn)行原理如下圖所示:


image.png

實(shí)現(xiàn)代碼:

import pymysql

pip install PyMySQL

# 為了兼容mysqldb,只需要加入

pymysql.install_as_MySQLdb()

# 打開數(shù)據(jù)庫連接

conn = pymysql.connect(host='*.*.*.*',

                       port=3306,

                       user='*',

                       passwd='*',

                       charset = 'utf8'

                       )

# 使用 cursor() 方法創(chuàng)建一個(gè)游標(biāo)對(duì)象 cursor                       

cursor = conn.cursor()

# 使用 execute()  方法執(zhí)行 SQL 查詢

cursor.execute("show databases;")

cursor.execute("use database_name;")

cursor.execute("show tables;")

cursor.execute("select * from tables_name")

# 使用 fetchone() 方法獲取單條數(shù)據(jù);使用 fetchall() 方法獲取所有數(shù)據(jù)

data = cursor.fetchall()

for item in data:

    print(item[0])

# 關(guān)閉數(shù)據(jù)庫連接

cursor.close()

2乓旗、SQLAlchemy
sqlalchemy是python的orm程序府蛇,(object relational mapping,對(duì)象映射關(guān)系程序)在使用sqlalchemy之前要先給python安裝mysql驅(qū)動(dòng)

它既支持原生SQL又支持ORM

實(shí)現(xiàn)代碼:

create_engine("數(shù)據(jù)庫類型+數(shù)據(jù)庫驅(qū)動(dòng)://數(shù)據(jù)庫用戶名:數(shù)據(jù)庫密碼@IP地址:端口/數(shù)據(jù)庫",其他參數(shù))

echo=True是開啟調(diào)試屿愚,這樣當(dāng)我們執(zhí)行文件的時(shí)候會(huì)提示相應(yīng)的文字汇跨。

from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

from sqlalchemy_declarative import Address, Base, Person

class Address(Base):

  __tablename__ = 'address'

  id = Column(Integer, primary_key=True)

  street_name = Column(String(250))

engine = create_engine('sqlite:///sqlalchemy_example.db')

Base.metadata.bind = engine

DBSession = sessionmaker(bind=engine)

session = DBSession()

# Insert a Person in the person table

new_person = Person(name='new person')

session.add(new_person)

session.commit()

3务荆、 MySQL-python

因?yàn)樗患嫒軵ython3.x,所以現(xiàn)在已經(jīng)被MySQLclient取代

# _*_ coding: utf-8 _*_

import MySQLdb

# 創(chuàng)建連接

conn = MySQLdb.connect(

host='10.181.68.153',# 你的MySQL服務(wù)器地址

port=3357,# 端口

user='root',# 訪問數(shù)據(jù)庫服務(wù)的用戶名和密碼

passwd='Xb123456@',

db='xiaob_new',# 數(shù)據(jù)庫名稱

charset='utf8' # 如果去掉這句話穷遂,下面的一等獎(jiǎng)會(huì)展示亂碼

)

# 執(zhí)行查詢

cur = conn.cursor()

cur.execute("select * from award") # 執(zhí)行查詢

results = cur.fetchall() # 拿到返回結(jié)果

for re in results: # 循環(huán)并打印拿到的結(jié)果

print(re)

4函匕、peewee

(來自網(wǎng)絡(luò))寫原生 SQL 的過程非常繁瑣,代碼重復(fù)蚪黑,沒有面向?qū)ο笏季S盅惜,繼而誕生了很多封裝 wrapper 包和 ORM 框架,ORM 是 Python 對(duì)象與數(shù)據(jù)庫關(guān)系表的一種映射關(guān)系忌穿,有了 ORM 你不再需要寫 SQL 語句抒寂。提高了寫代碼的速度,同時(shí)兼容多種數(shù)據(jù)庫系統(tǒng)掠剑,如sqlite, mysql屈芜、postgresql,付出的代價(jià)可能就是性能上的一些損失朴译。如果你對(duì) Django 自帶的 ORM 熟悉的話井佑,那么 peewee的學(xué)習(xí)成本幾乎為零。它是 Python 中是最流行的 ORM 框架眠寿。

import peewee

from peewee import *

db = MySQLDatabase('jonhydb', user='john', passwd='megajonhy')

class Book(peewee.Model):

  author = peewee.CharField()

  title = peewee.TextField()

  class Meta:

    database = db

Book.create_table()

book = Book(author="me", title='Peewee is cool')

book.save()

for book in Book.filter(author="me"):

  print(book.title)

如果覺得有用請(qǐng)給我點(diǎn)個(gè)贊吧躬翁,謝謝你的支持,?( ′???` )?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盯拱,一起剝皮案震驚了整個(gè)濱河市盒发,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坟乾,老刑警劉巖迹辐,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝶防,死亡現(xiàn)場離奇詭異甚侣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)间学,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門殷费,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人低葫,你說我怎么就攤上這事详羡。” “怎么了嘿悬?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵实柠,是天一觀的道長。 經(jīng)常有香客問我善涨,道長窒盐,這世上最難降的妖魔是什么草则? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮蟹漓,結(jié)果婚禮上炕横,老公的妹妹穿的比我還像新娘。我一直安慰自己葡粒,他們只是感情好份殿,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嗽交,像睡著了一般卿嘲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上轮纫,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天腔寡,我揣著相機(jī)與錄音,去河邊找鬼掌唾。 笑死放前,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的糯彬。 我是一名探鬼主播凭语,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撩扒!你這毒婦竟也來了似扔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤搓谆,失蹤者是張志新(化名)和其女友劉穎炒辉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泉手,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡黔寇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斩萌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缝裤。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖颊郎,靈堂內(nèi)的尸體忽然破棺而出憋飞,到底是詐尸還是另有隱情,我是刑警寧澤姆吭,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布榛做,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏检眯。R本人自食惡果不足惜升敲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望轰传。 院中可真熱鬧驴党,春花似錦、人聲如沸获茬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恕曲。三九已至鹏氧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間佩谣,已是汗流浹背把还。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留茸俭,地道東北人吊履。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像调鬓,于是被迫代替她去往敵國和親艇炎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361