Python操作MySQL

这篇文章主要记录如何使用Python操作MySQL数据库的基础知识点。

准备工作

  • 在开始之前需要先安装MySQL数据库,以及应用模块MySQLdb。很简单:
$ sudo apt-get install mysql-server
$ sudo apt-get install python-mysqldb
  • 接下来,需要在MySQL中建立一个新的数据库testdb和新用户Do,以便操作。
$ mysql -uroot -p
$ create database testdb;
$ create user 'Do'@'localhost' identified by '123';#创建新用户
$ use testdb;
$ grant all on testdb.* to 'Do'@'localhost';#为新用户授权
$ quit

Python DB-API

  • Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。
  • 不同的数据库你需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。
  • MySQLdb 是用于Python链接MySQL数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。

数据库链接

查看数据库版本信息

#!/usr/bin/python
# -*- coding: utf-8 -*-

import MySQLdb as mdb
import sys

try:
    con = mdb.connect('localhost', 'Do', '123', 'testdb');

    cur = con.cursor()
    cur.execute("select version()")

    ver = cur.fetchone()

    print "Database version : %s " % ver

except mdb.Error, e:

    print "Error %d: %s" % (e.args[0],e.args[1])
    sys.exit(1)

finally:    

    if con:    
        con.close()
  • 在这个例子中,用Python链接到了MySQL,并执行了select version()语句。将会返回MySQL数据库的版本信息。
  • import MySQLdb as mdb导入MySQLdb模块。
  • con = mdb.connect('localhost', 'Do', '123', 'testdb');链接MySQL。connect()方法包含4个参数:主机、用户名、密码、数据库名称。
  • cur = con.cursor()cursor是“游标、光标、指针”的意思,用来记录返回的结果。
  • cur.execute("select version()")调用cursor的execute()方法,并执行SQL语句。
  • ver = cur.fetchone()获取数据。因为只获取一条记录,所以使用fetchone()方法。
  • print "Database version : %s " % ver将获取的数据打印出来。
  • except mdb.Error, e:错误处理。这很重要!
  • finally:最后一步,释放资源。

创建表 插入数据 查询

# -*- coding: utf-8 -*-

import MySQLdb as mdb

con = mdb.connect('localhost', 'Do', '123', 'testdb');

with con:

    cur = con.cursor()
    cur.execute("DROP TABLE IF EXISTS Writers")
    cur.execute("create table Writers(ID int primary key auto_increment,Name varchar(25))")
    cur.execute("insert into Writers(Name) values('Jack London')")
    cur.execute("insert into Writers(Name) values('Truman Capote')")
    cur.execute("select * from Writers")
    for i in range(cur.rowcount):
        row = cur.fetchone()
        print row[0], row[1] 


输出:
1 Jack London
2 Truman Capote
  • with con:此处用到with关键字。能够自动释放资源,并提供错误处理。
  • cur.execute("DROP TABLE IF EXISTS Writers")删除已存在的表。

列名

打印出筛选的数据的同时,标注列名:

# -*- coding: utf-8 -*-

import MySQLdb as mdb

con = mdb.connect('localhost', 'Do', '123', 'testdb')

with con:

    cur = con.cursor()
    cur.execute("select * from Writers")

    rows = cur.fetchall()

    desc = cur.description

    print "%s %3s" % (desc[0][0], desc[1][0])

    for row in rows:    
        print "%2s %3s" % row

输出:
ID Name
 1 Jack London
 2 Truman Capote

使用占位符

在SQL语句执行之前,占位符已经锁定了它们的值。

# -*- coding: utf-8 -*-

import MySQLdb as mdb

con = mdb.connect('localhost', 'Do', '123', 'testdb')

with con:    

    cur = con.cursor()

    cur.execute("update Writers set Name = %s where Id = %s", 
        ("Guy", "2"))        

    print "Number of rows updated:",  cur.rowcount


#进入MySQL查看是否更新:
mysql> select * from Writers;
+----+-------------+
| ID | Name        |
+----+-------------+
|  1 | Jack London |
|  2 | Guy         |
+----+-------------+
2 rows in set (0.00 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值