• python操作mysql数据库的常用方法使用详解


    python操作mysql数据库

    1、环境准备:

    Linux

    安装mysql: apt-get install mysql-server

    安装python-mysql模块:apt-get install python-mysqldb


    Windows

    下载安装mysql
    python操作mysql模块:MySQL-python-1.2.3.win32-py2.7.exe 或 MySQL-python-1.2.3.win-amd64-py2.7.exe

    下载地址:http://blog.csdn.net/reblue520/article/details/51702485

    不安装python-mysqldb模块会报错:

    Unused import: MySQLdb,需要安装pytho-mysqldb

    mysql图形界面:Navicat_for_MySQL 方便观察数据库的变化

    安装python开发环境,具体可参考:windows下搭建eclipse关于python的开发环境及初始化参数配置

    2、一个简单连接数据库的例子:

    import MySQLdb
     
    try:
        conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db='test',port=3306)
        cur=conn.cursor()
        cur.execute('select user,password from user')
        cur.close()
        conn.close()
    except MySQLdb.Error,e:
         print "Mysql Error %d: %s" % (e.args[0], e.args[1])


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

    3、插入数据,批量插入数据,更新数据的例子:

    #!/usr/bin/env python
    #_*_ coding:utf-8 _*_
    
    
    import MySQLdb
    
    
    try:
        conn = MySQLdb.Connect(host='192.168.8.40',user='root',passwd='root',db='mysql',port=3306)
        
        cur = conn.cursor()
        rs = cur.execute('select user,password,host from user')
        rs = cur.execute('create database if not exists python')
        conn.select_db('python')
        
        cur.execute('create table test(id int,info varchar(30))') 
        
        value = [1,'hi jack']
        
        cur.execute('insert into test values(%s,%s)',value)
        
        values = []
        for i in range(20):
            values.append((i,'hi jack' + str(i)))
            
        cur.executemany('insert into test values(%s,%s)',values)
        
        cur.execute('update test set info="i am jack" where id=3')
        
        conn.commit()
        cur.close()
        conn.close()
    except MySQLdb.Error,e:
        print 'mysql error msg: %d,%s' % (e.args[0],e.args[1])
    


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

    4、常用获取数据的一些方法



    #!/usr/bin/env python
    #_*_ coding:utf-8 _*_
    
    
    import MySQLdb
    
    
    try:
        conn = MySQLdb.Connect(host='192.168.8.40',user='root',passwd='root',db='mysql',port=3306,charset='utf8')
        
        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
        
        result2 = cur.fetchmany(3)
        for record in result2:
            print record
            
        print '=='*10
        cur.scroll(0,mode='absolute')
        
        result3 = cur.fetchall()
        for record in result3:
            print record[0] ,'---',record[1]
        
        conn.commit()
        cur.close()
        conn.close()
    except MySQLdb.Error,e:
        print 'mysql error msg: %d,%s' % (e.args[0],e.args[1])
    


    查询后中文会显示乱码,但在数据库中却是正常的,发现用一个属性有可搞定:

    在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条.
  • 相关阅读:
    spring-redis SortedSet类型成员的过期时间处理
    Redis "MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk"问题
    2015InfoQ软件大会技术记录
    nginx搭建文件服务器
    Electron
    TaoKeeper
    (转)前端:将网站打造成单页面应用SPA
    转(解决GLIBC_2.x找不到的编译问题)
    java编译、编码、语言设置
    Discuz! 论坛
  • 原文地址:https://www.cnblogs.com/reblue520/p/6239778.html
Copyright © 2020-2023  润新知