摘要:儘管很多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大數據
留下你的回應
以訪客張貼回應