摘要:儘管很多NoSQL 數據庫近幾年大放異彩,但是像MySQL 這樣的關係型數據庫依然是互聯網的主流數據庫之一,每個學Python 的都有必要學好一門數據庫,不管你是做數據分析,還是網絡爬蟲,Web 開發、亦或是機器學習,你都離不開要和數據庫打交道,而MySQL 又是最流行的一種數據庫,這篇文章介紹Python 操作MySQL 的幾種方式,你可以在實際開發過程中根據實際情況合理選擇。

 

 


圖名

 

 

儘管很多NoSQL 數據庫近幾年大放異彩,但是像MySQL 這樣的關係型數據庫依然是互聯網的主流數據庫之一,每個學Python 的都有必要學好一門數據庫,不管你是做數據分析,還是網絡爬蟲,Web 開發、亦或是機器學習,你都離不開要和數據庫打交道,而MySQL 又是最流行的一種數據庫,這篇文章介紹Python 操作MySQL 的幾種方式,你可以在實際開發過程中根據實際情況合理選擇。

1、MySQL-python

 

MySQL-python 又叫MySQLdb,是Python 連接MySQL 最流行的一個驅動,很多框架都也是基於此庫進行開發,遺憾的是它只支持Python2.x,而且安裝的時候有很多前置條件,因為它是基於C開發的庫,在Windows 平台安裝非常不友好,經常出現失敗的情況,現在基本不推薦使用,取代的是它的衍生版本。

#前置條件
sudo  apt - get  install  python - dev  libmysqlclient - dev  # Ubuntu 
sudo  yum  install  python - devel  mysql - devel  # Red Hat / CentOS

#安裝
pip  install  MySQL - python

Windows 直接通過下載exe 文件安裝,公眾號回复「win」獲取下載鏈接

#!/usr/bin/python 
import  MySQLdb

db  =  MySQLdb . connect ( 
     host = "localhost" ,     #主機名
     user = "john" ,          #用戶名
     passwd = "megajonhy" ,   #密碼
     db = "jonhydb" )         #數據庫名稱

#查詢前,必須先獲取游標
cur  =  db . cursor ()

#執行的都是原生SQL語句
cur . execute ( "SELECT * FROM YOUR_TABLE_NAME" )

for  row  in  cur . fetchall (): 
    print ( row [ 0 ])

db . close ()

2、mysqlclient

 

由於MySQL-python 年久失修,後來出現了它的Fork 版本mysqlclient,完全兼容MySQLdb,同時支持Python3.x,是Django ORM的依賴工具,如果你想使用原生SQL 來操作數據庫,那麼推薦此驅動。安裝方式和MySQLdb 是一樣的,Windows 可以在https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient 網站找到對應版本的whl 包下載安裝。

大數據

# Windows安裝
pip  install  some - package . whl

# linux前置條件
sudo  apt - get  install  python3 - dev  # debian / Ubuntu 
sudo  yum  install  python3 - devel  # Red Hat / CentOS 
brew  install  mysql - connector - c  # macOS (Homebrew)

pip  install  mysqlclient

3、PyMySQL

 

PyMySQL 是純Python 實現的驅動,速度上比不上MySQLdb,最大的特點可能就是它的安裝方式沒那麼繁瑣,同時也兼容MySQL-python

pip  install  PyMySQL 
#為了兼容mysqldb,只需要加入
pymysql . install_as_MySQLdb ()

一個例子

import  pymysql 
conn  =  pymysql . connect ( host = '127.0.0.1' ,  user = 'root' ,  passwd = "xxx" ,  db = 'mysql' ) 
cur  =  conn . cursor () 
cur . execute ( "SELECT Host,User FROM user" ) 
for  r  in  cur : 
    print ( r ) 
cur . close () 
conn . close()

4、peewee

 

寫原生SQL 的過程非常繁瑣,代碼重複,沒有面向對象思維,繼而誕生了很多封裝wrapper 包和ORM 框架,ORM 是Python 對象與數據庫關係表的一種映射關係,有了ORM 你不再需要寫SQL語句。提高了寫代碼的速度,同時兼容多種數據庫系統,如sqlite, mysql、postgresql,付出的代價可能就是性能上的一些損失。如果你對Django 自帶的ORM 熟悉的話,那麼peewee的學習成本幾乎為零。它是Python 中是最流行的ORM 框架。

pip  install  peewee

一個例子

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 )

官方文檔:http://docs.peewee-orm.com/en/latest/peewee/installation.html

5、SQLAlchemy

 

如果想找一種既支持原生SQL,又支持ORM 的工具,那麼SQLAlchemy 是最好的選擇,它非常接近Java 中的Hibernate 框架。

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

 

 

轉貼自: 36大數據


留下你的回應

以訪客張貼回應

0

在此對話中的人們

YOU MAY BE INTERESTED