用Python连接MySQL的几种姿势

举报
技术火炬手 发表于 2018/01/17 11:26:46 2018/01/17
【摘要】 尽管很多 NoSQL 数据库近几年大放异彩,但是像 MySQL 这样的关系型数据库依然是互联网的主流数据库之一,每个学 Python 的都有必要学好一门数据库,不管你是做数据分析,还是网络爬虫,Web 开发、亦或是机器学习,你都离不开要和数据库打交道,而 MySQL 又是最流行的一种数据库,这篇文章介绍 Python 操作 MySQL 的几种方式,你可以在实际开发过程中根据实际情况合理选择。1、M

image.png

尽管很多 NoSQL 数据库近几年大放异彩,但是像 MySQL 这样的关系型数据库依然是互联网的主流数据库之一,每个学 Python 的都有必要学好一门数据库,不管你是做数据分析,还是网络爬虫,Web 开发、亦或是机器学习,你都离不开要和数据库打交道,而 MySQL 又是最流行的一种数据库,这篇文章介绍 Python 操作 MySQL 的几种方式,你可以在实际开发过程中根据实际情况合理选择。

1MySQL-python

MySQL-python 又叫 MySQLdb,是 Python 连接 MySQL 最流行的一个驱动,很多框架都也是基于此库进行开发,遗憾的是它只支持 Python2.x,而且安装的时候有很多前置条件,因为它是基于C开发的库,在 Windows 平台安装非常不友好,经常出现失败的情况,现在基本不推荐使用,取代的是它的衍生版本。

1.    前置条件 

2.    sudo apt-get install python-dev libmysqlclient-dev # Ubuntu 

3.    sudo yum install python-devel mysql-devel # Red Hat / CentOS 

4.     

5.    安装 

6.    pip install MySQL-python  

Windows 直接通过下载 exe 文件安装,公众号回复「win」获取下载链接

1.    #!/usr/bin/python 

2.    import MySQLdb 

3.     

4.    db = MySQLdb.connect

5.         host="localhost",    # 主机名 

6.         user="john",         # 用户名 

7.         passwd="megajonhy",  # 密码 

8.         db="jonhydb")        # 数据库名称 

9.     

10.  查询前,必须先获取游标 

11.  cur = db.cursor() 

12.   

13.  执行的都是原生SQL语句 

14.  cur.execute("SELECT * FROM YOUR_TABLE_NAME"

15.   

16.  for row in cur.fetchall(): 

17.      print(row[0]) 

18.   

19.  db.close()  

2mysqlclient

由于 MySQL-python 年久失修,后来出现了它的 Fork 版本 mysqlclient,完全兼容 MySQLdb,同时支持 Python3.x,是 Django ORM的依赖工具,如果你想使用原生 SQL 来操作数据库,那么推荐此驱动。安装方式和 MySQLdb 是一样的,Windows 可以在 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient 网站找到 对应版本的 whl 包下载安装。

image.png

1.    # Windows安装 

2.    pip install some-package.whl 

3.     

4.    # linux 前置条件 

5.    sudo apt-get install python3-dev # debian / Ubuntu 

6.    sudo yum install python3-devel # Red Hat / CentOS 

7.    brew install mysql-connector-c # macOS (Homebrew) 

8.     

9.    pip install mysqlclient 

3PyMySQL

PyMySQL 是纯 Python 实现的驱动,速度上比不上 MySQLdb,最大的特点可能就是它的安装方式没那么繁琐,同时也兼容 MySQL-python

1.    pip install PyMySQL 

2.    为了兼容mysqldb,只需要加入 

3.    pymysql.install_as_MySQLdb()  

一个例子

1.    import pymysql 

2.    conn = pymysql.connect(host='127.0.0.1'user='root', passwd="xxx", db='mysql'

3.    cur = conn.cursor() 

4.    cur.execute("SELECT Host,User FROM user"

5.    for r in cur: 

6.        print(r) 

7.    cur.close() 

8.    conn.close()  

4peewee

写原生 SQL 的过程非常繁琐,代码重复,没有面向对象思维,继而诞生了很多封装 wrapper 包和 ORM 框架,ORM Python 对象与数据库关系表的一种映射关系,有了 ORM 你不再需要写 SQL 语句。提高了写代码的速度,同时兼容多种数据库系统,如sqlite, mysqlpostgresql,付出的代价可能就是性能上的一些损失。如果你对 Django 自带的 ORM 熟悉的话,那么 peewee的学习成本几乎为零。它是 Python 中是最流行的 ORM 框架。

1.    pip install peewee  

一个例子

1.    import peewee 

2.    from peewee import * 

3.     

4.    db = MySQLDatabase('jonhydb'user='john', passwd='megajonhy'

5.     

6.    class Book(peewee.Model): 

7.        author = peewee.CharField() 

8.        title = peewee.TextField() 

9.     

10.      class Meta: 

11.          database = db 

12.   

13.  Book.create_table() 

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

15.  book.save() 

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

17.      print(book.title)  

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

5SQLAlchemy

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

1.    from sqlalchemy import create_engine 

2.    from sqlalchemy.orm import sessionmaker 

3.     

4.    from sqlalchemy_declarative import Address, Base, Person 

5.     

6.    class Address(Base): 

7.        __tablename__ = 'address' 

8.        id = Column(Integer, primary_key=True

9.        street_name = Column(String(250)) 

10.   

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

12.  Base.metadata.bind = engine 

13.   

14.  DBSession = sessionmaker(bind=engine) 

15.  session = DBSession() 

16.   

17.  Insert a Person in the person table 

18.  new_person = Person(name='new person'

19.  session.add(new_person) 

20.  session.commit()   

现在差不多搞明白了这几种数据库驱动的优劣,接下来你就可以选择其中的一个进行系统的学习再把它应用到项目中去了 


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。