开发者社区> 问答> 正文

小白必看的Python操作MySQL的5种方式

小白必看的Python操作MySQL的5种方式

展开
收起
社区秘书 2019-12-10 16:31:09 533 0
1 条回答
写回答
取消 提交回答
  • 不管你是做数据分析,还是网络爬虫,Web开发,亦或者机器学习,你都离不开要和数据库打交道,而MySQL又是最流行的一种数据库,介绍文章介绍Python操作MySQL的5种方式,您可以在实际开发过程中根据实际情况合理选择。

    1,MySQLdb

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

    
    sudo apt-get install python-dev libmysqlclient-dev # Ubuntu<font></font>
    
    sudo yum install python-devel mysql-devel # Red Hat / CentOS<font></font>
    
    # 安装<font></font>
    
    pip install MySQL-python<font></font>
    
    Windows 直接通过下载 exe 文件安装
    
    
    import MySQLdb<font></font>
    
    db = MySQLdb.connect(<font></font>
    
         host="localhost",    # 主机名<font></font>
    
         user="root",         # 用户名<font></font>
    
         passwd="pythontab.com",  # 密码<font></font>
    
         db="testdb")        # 数据库名称<font></font>
    
    # 查询前,必须先获取游标<font></font>
    
    cur = db.cursor()<font></font>
    
    # 执行的都是原生SQL语句<font></font>
    
    cur.execute("SELECT * FROM mytable")<font></font>
    
    for row in cur.fetchall():<font></font>
    
        print(row[0])<font></font>
    
    db.close()
    

    2,mysqlclient

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

    
    pip install some-package.whl
    
    
    sudo apt-get install python3-dev # debian / Ubuntu<font></font>
    
    sudo yum install python3-devel # Red Hat / CentOS<font></font>
    
    brew install mysql-connector-c # macOS (Homebrew)<font></font>
    
    pip install mysqlclient
    

    3,PyMySQL

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

    
    # 为了兼容mysqldb,只需要加入<font></font>
    
    pymysql.install_as_MySQLdb()
    

    例子

    
    conn = pymysql.connect(host='127.0.0.1', user='root', passwd="pythontab.com", db='testdb')<font></font>
    
    cur = conn.cursor()<font></font>
    
    cur.execute("SELECT Host,User FROM user")<font></font>
    
    for r in cur:<font></font>
    
        print(r)<font></font>
    
    cur.close()<font></font>
    
    conn.close()
    

    4,皮皮

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

    安装

    例子

    
    from peewee import *<font></font>
    
    db = MySQLDatabase('testdb', user='root', passwd='pythontab.com')<font></font>
    
    class Book(peewee.Model):<font></font>
    
        author = peewee.CharField()<font></font>
    
        title = peewee.TextField()<font></font>
    
        class Meta:<font></font>
    
            database = db<font></font>
    
    Book.create_table()<font></font>
    
    book = Book(author="pythontab", title='pythontab is good website')<font></font>
    
    book.save()<font></font>
    
    for book in Book.filter(author="pythontab"):<font></font>
    
        print(book.title)
    

    5,SQL炼金术

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

    
    from sqlalchemy.orm import sessionmaker<font></font>
    
    from sqlalchemy_declarative import Address, Base, Person<font></font>
    
    class Address(Base):<font></font>
    
        __tablename__ = 'address'<font></font>
    
        id = Column(Integer, primary_key=True)<font></font>
    
        street_name = Column(String(250))<font></font>
    
    engine = create_engine('sqlite:///sqlalchemy_example.db')<font></font>
    
    Base.metadata.bind = engine<font></font>
    
    DBSession = sessionmaker(bind=engine)<font></font>
    
    session = DBSession()<font></font>
    
    # Insert a Person in the person table<font></font>
    
    new_person = Person(name='new person')<font></font>
    
    session.add(new_person)<font></font>
    
    session.commit()
    

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

    2019-12-10 16:33:20
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载