python library MySQLdb

python library MySQLdb

  1. MySQLdb Download

  2. MySQLdb install

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@localhost ~]# yum -y install python-devel
    [root@localhost ~]# unzip MySQL-python-1.2.5.zip
    [root@localhost ~]# cd MySQL-python-1.2.5
    [root@localhost MySQL-python-1.2.5]# python setup.py build
    [root@localhost MySQL-python-1.2.5]# python setup.py install
    [root@localhost MySQL-python-1.2.5]# pip list|grep MySQL
    MySQL-python (1.2.5)

    或者:
    [root@localhost ~]# pip install MySQL-python
  3. MySQLdb常用参数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    * connect() 方法用于连接数据库,返回一个数据库连接对象
    例如: db = MySQLdb.connect(host="{hostname|IP}",user="{user}",passwd="{passwd}",db="{dbname}")

    connect()的参数列表如下:
    * host
    连接的数据库服务器主机名,默认为本地主机(localhost)
    * port
    指定数据库服务器的连接端口,默认是3306
     * user
    连接数据库的用户名,默认为当前用户
    * passwd
    连接密码,没有默认值
     * db
    连接的数据库名,没有默认值
    * unix_socket
    在unix中,连接使用的套接字,默认使用TCP
     * conv
    将文字映射到Python类型的字典.默认为MySQLdb.converters.conversions
     * cursorclass
    cursor()使用的种类,默认值为MySQLdb.cursors.Cursor
     * compress
    启用协议压缩功能
     * named_pipe
    在windows中,与一个命名管道相连接
     * init_command
    一旦连接建立,就为数据库服务器指定一条语句来运行
     * read_default_file
    使用指定的MySQL配置文件
     * read_default_group
    读取的默认组

    * 连接对象的db.close()方法可关闭数据库连接,并释放相关资源

    * 连接对象的db.cursor([cursorClass])方法返回一个指针对象,用于访问和操作数据库中的数据

    * 连接对象的db.begin()方法用于开始一个事务,如果数据库的AUTOCOMMIT已经开启就关闭它,直到事务调用commit()和rollback()结束

    * 连接对象的db.commit()和db.rollback()方法分别表示事务提交和回退

    * 指针对象的cursor.close()方法关闭指针并释放相关资源

    * 指针对象的cursor.execute(query[,parameters])方法执行数据库查询

    * 指针对象的cursor.fetchall()可取出指针结果集中的所有行,返回的结果集一个元组(tuples)

    * 指针对象的cursor.fetchmany([size=cursor.arraysize])从查询结果集中取出多行,我们可利用可选的参数指定取出的行数

    * 指针对象的cursor.fetchone()从查询结果集中返回下一行

    * 指针对象的cursor.arraysize属性指定由cursor.fetchmany()方法返回行的数目,影响fetchall()的性能,默认值为1

    * 指针对象的cursor.rowcount属性指出上次查询或更新所发生行数.-1表示还没开始查询或没有查询到数据
  4. 通过 MySQLdb 验证连通性

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    [root@localhost ~]# cat dbtest.py
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host='127.0.0.1',
    unix_socket='/mnt/data/mysql/3306/mysql.sock',
    db='test')

    cursor = db.cursor()

    cursor.execute("SELECT VERSION()")

    data = cursor.fetchone()

    print "Database version : %s " % data

    db.close()
    [root@localhost ~]# python dbtest.py
    Database version : 5.6.36-log
  5. 通过 MySQLdb 创建表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    [root@localhost ~]# cat dbtest.py
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host='127.0.0.1',
    unix_socket='/mnt/data/mysql/3306/mysql.sock',
    db='test')

    cursor = db.cursor()

    cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

    sql = """CREATE TABLE EMPLOYEE (
    FIRST_NAME CHAR(20) NOT NULL,
    LAST_NAME CHAR(20),
    AGE INT,
    SEX CHAR(1),
    INCOME FLOAT )"""

    cursor.execute(sql)

    cursor.execute("SHOW TABLES")

    data = cursor.fetchall()

    print "%s" % data

    db.close()
    [root@localhost ~]# python dbtest.py
    ('EMPLOYEE',)
  6. 通过 MySQLdb 插入数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    [root@localhost ~]# cat dbtest.py
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host='127.0.0.1',
    unix_socket='/mnt/data/mysql/3306/mysql.sock',
    db='test')

    cursor = db.cursor()

    sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
    LAST_NAME, AGE, SEX, INCOME) \
    VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
    ('Mac', 'Mohan', 20, 'M', 2000)

    try:
    cursor.execute(sql)
    db.commit()
    except:
    db.rollback()

    db.close()

    [root@localhost ~]# python dbtest.py
  7. 通过 MySQLdb 查询数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    [root@localhost ~]# cat dbtest.py
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host='127.0.0.1',
    unix_socket='/mnt/data/mysql/3306/mysql.sock',
    db='test')

    cursor = db.cursor()

    sql = "SELECT * FROM EMPLOYEE"

    try:
    cursor.execute(sql)

    results = cursor.fetchall()

    for row in results:
    fname = row[0]
    lname = row[1]
    age = row[2]
    sex = row[3]
    income = row[4]
    print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
    (fname, lname, age, sex, income )
    except:
    print "Error: unable to fecth data"

    db.close()
    [root@localhost ~]# python dbtest.py
    fname=Mac,lname=Mohan,age=20,sex=M,income=2000
  8. 通过 MySQLdb 更新数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    [root@localhost ~]# cat dbtest.py
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host='127.0.0.1',
    unix_socket='/mnt/data/mysql/3306/mysql.sock',
    db='test')

    cursor = db.cursor()

    sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')

    try:
    cursor.execute(sql)
    db.commit()
    except:
    db.rollback()

    db.close()
    [root@localhost ~]# python dbtest.py
  9. 通过 MySQLdb 删除数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    [root@localhost ~]# cat dbtest.py
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host='127.0.0.1',
    unix_socket='/mnt/data/mysql/3306/mysql.sock',
    db='test')

    cursor = db.cursor()

    sql = sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (10)

    try:
    cursor.execute(sql)
    db.commit()
    except:
    db.rollback()

    db.close()
    [root@localhost ~]# python dbtest.py