1. 首先确认python的版本为2.3.4以上,如果不是需要升级python的版本
     python -V   检查python版本

2. 安装mysql, 比如安装在/usr/local/mysql目录下

3. 下载 MySQL-python-1.2.2.tar.gz
    地址 http://sourceforge.net/projects/mysql-python/files/latest/download

4. 安装 MySQl-python
    tar xvzf MySQL-python-1.2.2.tar.gz
    cd MySQL-python-1.2.2
    vi site.cfg
    把 mysql_config = /usr/bin/mysql/mysql_config 这一行前的#去掉,并且把mysql_config的路径设置正确。
    python setup.py build
    sudo python setup.py install
    安装结束

5. 测试
    运行: python
    import MySQLdb
    如果没有报错,说明安装好了

安装mysql-python错误解决方法

_mysql.c:36:23: error: my_config.h: No such file or directory

_mysql.c:38:19: error: mysql.h: No such file or directory

_mysql.c:39:26: error: mysqld_error.h: No such file or directory

_mysql.c:40:20: error: errmsg.h: No such file or directory
error: command 'gcc' failed with exit status 1

----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip_build_root/mysql-python/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-fSejm9-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /tmp/pip_build_root/mysql-python
Traceback (most recent call last):
  File "/usr/bin/pip", line 11, in <module>
    sys.exit(main())
  File "/usr/lib/python2.6/site-packages/pip/__init__.py", line 185, in main
    return command.main(cmd_args)
  File "/usr/lib/python2.6/site-packages/pip/basecommand.py", line 161, in main
    text = '\n'.join(complete_log)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 65: ordinal not in range(128)

解决方法:

刚开始只看到下面的错误,以为gcc未安装的问题,后来仔细查看了安装过程,主要错误是由于找不到my_config.h文件

yum install mysql-devel -y

MySQLdb模块用于连接MySQL数据库。源码位于http://sourceforge.net/projects/mysql-python,其中还有用于zope的ZMySQLDA模块,通过它就可在zope中连接mysql数据库。

7.1. 安装

安装的方法在解压目录的README文件中有详细说明。不难,这里就不详细讲了。要注意的一点是,如果你的mysql不是安装在默认的路径,而是安装在/usr/local/mysql这样的路径的话,libmysqlclient.so.12这个动态库python可能会找不到,造成import出错,解决方法是在/usr/lib下做一个符号连接,ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so. libmysqlclient.so.。最后在python中用import MySQLdb测试,如果没有出错信息就说明安装成功,可以连接mysql数据库了。

7.2. 模块功能

connect()方法用于连接数据库,返回一个数据库连接对象。如果要连接一个位于host.remote.com服务器上名为fourm的MySQL数据库,连接串可以这样写:

db = MySQLdb.connect(host="remote.com",user="user",passwd="xxx",db="fourm" )

connect()的参数列表如下:

host,连接的数据库服务器主机名,默认为本地主机(localhost)。

user,连接数据库的用户名,默认为当前用户。

passwd,连接密码,没有默认值。

db,连接的数据库名,没有默认值。

conv,将文字映射到Python类型的字典。默认为MySQLdb.converters.conversions

cursorclass,cursor()使用的种类,默认值为MySQLdb.cursors.Cursor。

compress,启用协议压缩功能。

named_pipe,在windows中,与一个命名管道相连接。

init_command,一旦连接建立,就为数据库服务器指定一条语句来运行。

read_default_file,使用指定的MySQL配置文件。

read_default_group,读取的默认组。

unix_socket,在unix中,连接使用的套接字,默认使用TCP。

port,指定数据库服务器的连接端口,默认是3306。

连接对象的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表示还没开始查询或没有查询到数据。

7.3. 模块功能演示

#!/usr/bin/python
import MySQLdb
try:
   connection = MySQLdb.connect(user="user",passwd="password",host="xxx",db="test")
except:
   print "Could not connect to MySQL server."
   exit(  )
try:
   cursor = connection.cursor()
   cursor.execute( "SELECT note_id,note_detail FROM note where note_id = 1" )
   print "Rows selected:", cursor.rowcount
for row in cursor.fetchall():
       print ], row[]
   cursor.close()
Python 连接mysql数据库
 支持SQL标准的可用数据库有很多,其中多数在Python中都有对应的客户端模块.

这里我使用的mysql,它需要安装MySQLdb包.它相当于Python的数据接口规范Python DB API.

root@10.1.1.45:~# apt-get install python-mysqldb
root@10.1.1.45:~# python
Python  (r252:, Jan   , ::)
[GCC ] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>>
这里导入MySQLdb没有报错,就说明安装成功.

下面就可以连接数据库,可以进行增删改操作.
root@10.1.1.45:python# cat create.py
#!/usr/bin/env python
#coding=utf-

#导入相关模块
import MySQLdb

#建立和mysql数据库的连接
conn = MySQLdb.connect(host='localhost',user='root',passwd='davehe')
#获取游标
curs = conn.cursor()
#执行SQL,创建一个数据库
curs.execute("create database pythondb")
#选择连接哪个数据库
conn.select_db('pythondb')
#执行SQL,创建一个表
curs.execute("create table test(id int,message varchar(50))")
#插入一条记录
value = [,"davehe"]
curs.execute("insert into test values(%s,%s)",value)
#插入多条记录
values = []
):
    values.append((i,'hello mysqldb' + str(i)))
curs.executemany("insert into test values(%s,%s)",values)
#提交修改
conn.commit()
#关闭游标连接,释放资源
curs.close()
#关闭连接
conn.close()
root@10.1.1.45:python# ./create.py
下面利用python查看mysql里刚添加的记录.
root@10.1.1.45:python# cat select.py
#!/usr/bin/env python
#coding=utf-

#导入相关模块
import MySQLdb

#建立和mysql数据库的连接
conn = MySQLdb.connect(host='localhost',user='root',passwd='hc1226')
#获取游标
curs = conn.cursor()
#选择连接哪个数据库
conn.select_db('pythondb')
#查看共有多少条记录
count = curs.execute('select * from test')
print "一共有%s条记录" % count
#获取一条记录,以一个元组返回
result = curs.fetchone()
print "当前的一条记录 ID:%s message:%s" % result
#获取后10条记录,由于之前执行了getchone(),所以游标已经指到第二条记录,下面也就从第二条记录开始返回
results = curs.fetchmany()
for r in results:
    print r
#重置游标位置,,为偏移量,mode = relative(默认)
curs.scroll(,mode='absolute')
#获取所有记录
results = curs.fetchall()
for r in results:
    print r

#提交修改
conn.commit()
#关闭游标连接,释放资源
curs.close()
#关闭连接
conn.close()

root@10.1.1.45:python# ./select.py
一共有21条记录
当前的一条记录 ID: message:davehe
(0L, 'hello mysqldb0')
(1L, 'hello mysqldb1')
(2L, 'hello mysqldb2')
(3L, 'hello mysqldb3')
(4L, 'hello mysqldb4')
(5L, 'hello mysqldb5')
(6L, 'hello mysqldb6')
(7L, 'hello mysqldb7')
(8L, 'hello mysqldb8')
(9L, 'hello mysqldb9')
(1L, 'davehe')
(0L, 'hello mysqldb0')
(1L, 'hello mysqldb1')
(2L, 'hello mysqldb2')
(3L, 'hello mysqldb3')
(4L, 'hello mysqldb4')
(5L, 'hello mysqldb5')
(6L, 'hello mysqldb6')
(7L, 'hello mysqldb7')
(8L, 'hello mysqldb8')
(9L, 'hello mysqldb9')
(10L, 'hello mysqldb10')
(11L, 'hello mysqldb11')
(12L, 'hello mysqldb12')
(13L, 'hello mysqldb13')
(14L, 'hello mysqldb14')
(15L, 'hello mysqldb15')
(16L, 'hello mysqldb16')
(17L, 'hello mysqldb17')
(18L, 'hello mysqldb18')
(19L, 'hello mysqldb19')

附:

connect函数的常用参数
user         #用户名
password   #用户密码
host         #主机名
database   #数据库名
connect函数会返回连接对象,连接对象方法
close()      #关闭连接之后,连接对象和它的游标均不可用
commit()   #如果支持的话就提交挂起的事务,否则不做任何事
rollback()   #回滚挂起的事务(可能不可用)
cursor()     #返回连接的游标对象

游标对象方法
close()                          #关闭游标
execute(oper[,params])    #执行SQL操作,可能使用参数
executemany(oper,pseq)   #对序列中的每个参数执行SQL操作
fetchone()                     #把查询的结果集中的下一行保存为序列,或者None
fetchmany([size])            #获取查询结果集中的多行,默认为1
fetchall()                       #将所有(剩余)的行作为序列的序列 
python操作MySQL数据库
-- : by Rollen Holt,  阅读,  评论, 收藏, 编辑

坚持每天学一点,每天积累一点点,作为自己每天的业余收获,这个文章是我在吃饭的期间写的,利用自己零散的时间学了一下python操作MYSQL,所以整理一下。

我采用的是MySQLdb操作的MYSQL数据库。先来一个简单的例子吧:
import MySQLdb
 try:
 conn=MySQLdb.connect(host=)
    cur=conn.cursor()
    cur.execute('select * from user')
    cur.close()
    conn.close()
except MySQLdb.Error,e:
     print ], e.args[])

  请注意修改你的数据库,主机名,用户名,密码。

下面来大致演示一下插入数据,批量插入数据,更新数据的例子吧:
import MySQLdb

try:
    conn=MySQLdb.connect(host=)
    cur=conn.cursor()

    cur.execute('create database if not exists python')
    conn.select_db('python')
    cur.execute('create table test(id int,info varchar(20))')

    value=[,'hi rollen']
    cur.execute('insert into test values(%s,%s)',value)

    values=[]
    ):
        values.append((i,'hi rollen'+str(i)))

    cur.executemany('insert into test values(%s,%s)',values)

    cur.execute('update test set info="I am rollen" where id=3')

    conn.commit()
    cur.close()
    conn.close()

except MySQLdb.Error,e:
     print ], e.args[])

  请注意一定要有conn.commit()这句来提交事务,要不然不能真正的插入数据。

运行之后我的MySQL数据库的结果就不上图了。
import MySQLdb

try:
    conn=MySQLdb.connect(host=)
    cur=conn.cursor()

    conn.select_db('python')

    count=cur.execute('select * from test')
    print 'there has %s rows record' % count

    result=cur.fetchone()
    print result
    print 'ID: %s info %s' % result

    results=cur.fetchmany()
    for r in results:
        print r

    print
    cur.scroll(,mode='absolute')

    results=cur.fetchall()
    for r in results:
        print r[]

    conn.commit()
    cur.close()
    conn.close()

except MySQLdb.Error,e:
     print ], e.args[])

  运行结果就不贴了,太长了。

查询后中文会正确显示,但在数据库中却是乱码的。经过我从网上查找,发现用一个属性有可搞定:

在Python代码 

conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='python') 中加一个属性:
 改为:
conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='python',charset='utf8')
charset是要跟你数据库的编码一样,如果是数据库是gb2312 ,则写charset='gb2312'。

下面贴一下常用的函数:

然后,这个连接对象也提供了对事务操作的支持,标准的方法
commit() 提交
rollback() 回滚

cursor用来执行命令的方法:
callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self):移动到下一个结果集

cursor用来接收返回值的方法:
fetchall(self):接收全部的返回结果行.
fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条.

参考资料:

MySQLdb‘s user guide
package MySQLdb

python连接mysql数据库增删改(示例代码)

python连接mysql数据库的例子,提供创建表,删除表,数据增、删、改,批量插入操作。

,数据库配置类 MysqlDBConn.py

复制代码 代码示例:

#encoding=utf-
'''
Created on --

Mysql Conn连接类
'''
import MySQLdb
class DBConn:
    conn = None

    #建立和数据库系统的连接
    def connect(self):
        self.conn = MySQLdb.connect(host=,user="house", passwd="house" ,db="house",charset="utf8")

    #获取操作游标
    def cursor(self):
        try:
            return self.conn.cursor()
        except (AttributeError, MySQLdb.OperationalError):
            self.connect()
            return self.conn.cursor()

    def commit(self):
        return self.conn.commit()

    #关闭连接
    def close(self):
        return self.conn.close()

,MysqlDemo.py类

复制代码 代码示例:

#encoding=utf-
'''
Created on --

@author: Steven

,Mysql操作Demo

复制代码 代码示例:

Done:创建表,删除表,数据增、删、改,批量插入
'''
import MysqlDBConn

dbconn = MysqlDBConn.DBConn()

def process():
    #建立连接
    dbconn.connect()
    #删除表
    dropTable()
    #创建表
    createTable()
    #批量插入数据
    insertDatas()
    #单条插入
    insertData()
    #更新数据
    updateData()
    #删除数据
    deleteData()
    #查询数据
    queryData()
    #释放连接
    dbconn.close()

def insertDatas():
    sql = "insert into lifeba_users(name, realname, age) values(%s, %s, %s)"
    tmp = ((), ())
    executemany(sql, tmp)

def updateData():
    sql = "update lifeba_users set realname = '%s' where name ='steven1'"%("测试1修改")
    execute(sql)

def deleteData():
    sql = "delete from lifeba_users where id=2"
    execute(sql)

def queryData():
    sql = "select * from lifeba_users"
    rows = query(sql)
    printResult(rows)

def insertData():
    sql = ")
    print sql
    execute(sql)

def executemany(sql, tmp):
    '''插入多条数据'''
    conn=dbconn.cursor()
    conn.executemany(sql, tmp)

def execute(sql):
    '''执行sql'''
    conn=dbconn.cursor()
    conn.execute(sql)

def query(sql):
    '''查询sql'''
    conn=dbconn.cursor()
    conn.execute(sql)
    rows = conn.fetchmany()
    return rows

def createTable():
    '''创建表'''
    conn=dbconn.cursor()
    conn.execute('''
    CREATE TABLE `lifeba_users` (
      `ID` ) NOT NULL auto_increment,
      `name` varchar() default NULL,
      `realName` varchar() default NULL,
      `age` ) default NULL,
      PRIMARY KEY  (`ID`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    ''')
#    dbconn.commit()

def dropTable():
    '''删除表'''
    conn=dbconn.cursor()
    conn.execute('''
    DROP TABLE IF EXISTS `lifeba_users`
    ''')
#    dbconn.commit()

def printResult(rows):
    for row in rows:
        ,len(row)):#遍历数组
            print row[i], #加, 不换行打印
        print ''

if __name__ == '__main__':
    process()

以上分享了python连接mysql数据库,实现创建表,删除表,数据增、删、改,批量插入操作的代码,希望对大家有所帮助。

Python的MySQLdb模块安装,连接,操作,增删改的更多相关文章

  1. python之mysqldb模块安装

    之所以会写下这篇日志,是因为安装的过程有点虐心.目前这篇文章是针对windows操作系统上的mysqldb的安装.安装python的mysqldb模块,首先当然是找一些官方的网站去下载:https:/ ...

  2. Python的MySQLdb模块安装

    MySQL-python-1.2.1.tar.gz  下载地址:https://pan.baidu.com/s/1kVfH84v 然后解压,打开README(这个其实没有什么鸟用) 里面有安装过程: ...

  3. python全栈开发day62-两表操作增删改查,外键,if else模板语法

    一.今日内容总结: day62 内容回顾: 1. django有关所有命令: pip install django==1.11.14 django-admin startproject 项目名称 cd ...

  4. 在 mac 系统上安装 python 的 MySQLdb 模块

    在 mac 系统上安装 python 的 MySQLdb 模块 特别说明:本文主要参考了Mac系统怎么安装MySQLdb(MySQL-Python) 第 1 步:下载 MySQL-python-1.2 ...

  5. python中MySQLdb模块用法实例

    篇文章主要介绍了python中MySQLdb模块用法,以实例形式详细讲述了MySQLdb模块针对MySQL数据库的各种常见操作方法,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了python中 ...

  6. Mac MySQLdb模块安装,可算解决了

    转载:http://blog.csdn.net/janronehoo/article/details/25207825 短评:这篇文章感觉是比较全面解决Mac MySQLdb模块安装问题的文章了,特别 ...

  7. Python的第三方模块安装

    python的第三方模块安装一般使用python自带的工具pip来安装. 1.在Windows下,在安装python时勾选[安装pip]和[添加python至环境变量]. 如果在python安装目录的 ...

  8. python链接oracle数据库以及数据库的增删改查实例

    初次使用python链接oracle,所以想记录下我遇到的问题,便于向我这样初次尝试的朋友能够快速的配置好环境进入开发环节. 1.首先,python链接oracle数据库需要配置好环境. 我的相关环境 ...

  9. Hbase常用操作(增删改查)

    Hbase常用操作(增删改查) [日期:2014-01-03] 来源:Linux社区  作者:net19880504 [字体:大 中 小]     运行Eclipse,创建一个新的Java工程“HBa ...

随机推荐

  1. spring mvc 返回json数据的四种方式

    一.返回ModelAndView,其中包含map集 /* * 返回ModelAndView类型的结果 * 检查用户名的合法性,如果用户已经存在,返回false,否则返回true(返回json数据,格式 ...

  2. 页面加载时,页面中DIV随之滑动出来;去掉页面滚动条

    <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...

  3. 微型 ORM 的第二篇 DapperLambda性能测试[Dapper比较篇]

    由于这周比较忙,所以本来想做的性能测试,一直没时间,想想还是今天给补上吧 由于很多人都担心性能问题,封装之后跟Dapper的性能差距是多少,今天我给出我的测试方法,仅供参考. 创建IDbConnect ...

  4. ROS服务的理解

    服务是节点之间通信的另一种方式,服务允许节点发起一个请求和接收一个响应. 打开终端在里面输入: roscore 查看当前的运行节点: rosnode list 返回结果: /rosout 查看当前的运 ...

  5. Collections之sort的两个方法(自然排序和自定义比较器排序)

    Collections是个服务于Collection的工具类(静态的),它里面定义了一些集合可以用到的方法. 本文演示了Collections类里sort()的两个方法.第一种只需传入被排序的集合,便 ...

  6. 纯JS URL编解码

    function urlEncode(str) { var ret = ""; var strSpecial = "!\"#$%&’()*+,/:;&l ...

  7. 以正方教务系统为例,用php模拟登陆抓取课表、空教室

    课程格子和超级课程表这两个应用,想必大学生都很熟悉,使用自己的学号和教务系统的密码,就可以将自己的课表导入,随时随地都可以在手机上查看. 其实稍微了解一点php的话,我们也可以做一个类似这样的web ...

  8. iOS 开发技巧

    快速移除键盘 之前一直是讲view的父类改成control,然后加一个全屏按钮,点击让键盘消失.这个方法要写好多代码,现在一个比较好的方法是重写一个下面的方法: - (void)touchesBega ...

  9. 在PADS LAYOUT中如何隐藏不需要的鼠线?

    如下图示,将net GPR_0的鼠线隐藏. 鼠标右键,选择网络----选择你要隐藏的网络------右键选择view nets----点击对话框右边View List里你所选的网络-----在右下角t ...

  10. UPPH、UPH

    UPPH=units Per Hour Per Person,单位小时人均产能,是公司作为衡量员工工作绩效的重要指标. UPPH是衡量员工单位时间工作量的一种绩效指标. UPPH计算方式如下: UPP ...