python连接mysql数据库

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

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

3、mysqlclient
由于 MySQL-python 年久失修,后来出现了它的 Fork 版本 mysqlclient,完全兼容 MySQLdb,同时支持 Python3.x,是 Django ORM的依赖工具,如果你想使用原生 SQL 来操作数据库,那么推荐此驱动。

综上,选择 mysqlclient 来连接

安装mysqlclient

Windows下安装

在win7-64bit的环境下会有错误:unable to find vcvarsall.bat
直接使用pip install 安装失败

1、需要先下载wheel安装包
地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
根据对应的python版本下载安装包

在whl文件目录下安装wheel包

#cmd
Pip instal xxxxxxx.whl 

2、安装mysqlclient

#cmd
pip install mysqlclient

Linux下安装

1、在CentOS系统下使用pip安装mysqlclient库:

# Python 3
pip3 install mysqlclient

2、如果有报错就需要安装依赖:

yum install python-devel mysql-devel

在python中简单的使用

1、连接数据库

db = MySQLdb.connect('127.0.0.1','root','root','database')

#或者
db = MySQLdb.connect(host='127.0.0.1',port='3307',user='root',passwd='root',db='database')

#一般来说,在代码中放置密码并不是一个好主意。可以从 ~/.my.cnf (UNIX-like systems) 获取用户名和密码以及其他参数
db = MySQLdb.connect(host='127.0.0.1',db = 'database', read_default_file='~/.my.cnf')

2、要执行查询,首先需要一个游标,然后您可以对其执行查询

# 使用cursor()方法获取操作游标
cursor = db.cursor()

3、查询

# SQL语句
cid = 1000
sql_sel = 'select * from test_table WHERE id = %s'

# 执行sql语句 .execute()
cursor.execute(sql_sel,(cid,))

# 返回值 .fetchone() 返回单元组类型
cursor.fetchone()
(值1, 值2, 值3...)

4、如果您想要更多行,可以使用 .fetchmany(n).fetchall()
.fetchmany(n)n是可选的,默认为 c.arraysize ,通常为1.
这两个方法都返回一系列行,如果没有更多行,则返回一个空序列。
如果使用奇怪的游标类,则行本身可能不是元组。

请注意,与上面相反, 当没有更多行要提取时 c.fetchone() 返回 None

5、很可能使用的唯一其他方法是必须执行多行插入时

c.executemany(
'''INSERT INTO breakfast (name, spam, eggs, sausage, price)
      VALUES (%s, %s, %s, %s, %s)''',
      [
      ("Spam and Sausage Lover's Plate", 5, 1, 8, 7.95 ),
      ("Not So Much Spam Plate", 3, 2, 0, 3.95 ),
      ("Don't Wany ANY SPAM! Plate", 0, 4, 3, 5.95 )
      ] )

完整示例:

# coding=utf-8
import MySQLdb

# 打开数据库连接
db = MySQLdb.connect(host='127.0.0.1',user='root',passwd='root',db='test_db')
# 使用cursor()方法获取操作游标
cursor = db.cursor()

# 使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")


# SQL语句
cid = '1000'
sql_ins = 'INSERT INTO test_table VALUES (%s,%s)'
sql_del = 'DELETE FROM test_table WHERE id = %s '
sql_upd = 'UPDATE test_table SET dd = %s WHERE dd > %s'
sql_sel = 'select * from test_table WHERE id = %s'

try:
    # 执行sql语句,增
    cursor.execute(sql_ins,(cid,cid))

    # 执行sql语句,删
    cursor.execute(sql_del,(cid,))

    # 执行sql语句,改
    cursor.execute(sql_upd,(cid,cid))

    # 执行sql语句,查
    cursor.execute(sql_sel,(cid,))
    data = cursor.fetchall()

    # 提交到数据库执行
    db.commit()
except:
    # 发生错误时回滚
    db.rollback()

# 关闭数据库连接
db.close()

发表评论

邮箱地址不会被公开。 必填项已用*标注