zoukankan      html  css  js  c++  java
  • pymysql安装和使用

    一、pymysql安装

    安装mymysql前请确认python环境已经准备好,在之前的博文http://www.cnblogs.com/newzol/p/8682176.html有说明pythonweb环境的安装,如果已经具备了,那么在安装pymysql就变的简单了.只要做如下处理:
    tar -zxvf PyMySQL-0.7.11.tar.gz
    cd PyMySQL-0.7.11
    python setup.py install
    二、验证安装是否成功
    python
    >>import pymysql
    没有报错就好
    三、Pymysql的使用
    1、查询操做
    sql="select down_task_id,stock_code,list_date from down_task where down_type=1 and task_status=1"
            conn = pymysql.connect(host=MYSQL_IP,port=MYSQL_PORT,user=MYSQL_USER,passwd=MYSQL_PWD,db=MYSQL_DATABASE,charset=MYSQL_ENCODE)
            cur = conn.cursor()
            cur.execute(sql)
            for r in cur:
                mydata=downtask(r[0],r[1],r[2])
                task_dict[mydata.down_task_id]=mydata
                update_task(mydata.down_task_id,2)
            conn.close()

    pymysql也提供了很多取数据的方法,比如:

    • 取一行数据:row=cur.fetchone()
    • 取所有返回的记录row = cur.fetchall()
    • 取几行记录:row = cur.fetchmany(n) #n是返回的记录数
    2、更新数据
    sql="update down_task set task_status=%d,complate_date=now() where down_task_id=%d"
        conn = pymysql.connect(host=MYSQL_IP,port=MYSQL_PORT,user=MYSQL_USER,passwd=MYSQL_PWD,db=MYSQL_DATABASE,charset=MYSQL_ENCODE)
        try:
            cur = conn.cursor()
            time = datetime.datetime.now()
            time_str = datetime.datetime.strftime(time,'%Y-%m-%d%H:%M:%S')
            cur.execute(sql % (status,down_task_id))
            conn.commit()
            conn.close()
        except:
            print '##################update task compate failed,rollback###############'
            conn.rollback()
            conn.close()
            return False

    更新时记得要提交.只有在语句执行后做了提交操作,才会真正的将结果更新到数据表中.更新脚本中有时间字段时,特别是更新当前系统时间,直接用now()就好.

    3、插入操作
    sql="insert down_task(stock_code, down_type,task_status,complate_date,create_date,list_date) values(%s,2,1,now(),now(),%d)"
        conn = pymysql.connect(host=MYSQL_IP,port=MYSQL_PORT,user=MYSQL_USER,passwd=MYSQL_PWD,db=MYSQL_DATABASE,charset=MYSQL_ENCODE)
        try:
            cur = conn.cursor()
            cur.execute(sql % ("'"+stock_code+"'",list_date))
            conn.commit()
            conn.close()
        except:
            print '##################update task compate failed,rollback###############'
            conn.rollback()
            conn.close()
            return False

    插入操作时有两点需要注意:

    1、表中有自增主键,
    有两种处理方法:A:按照上面的处理,自增的字段不要写在sql中,后面绑定参数时也不用自己绑定,所有的操作数据库完成.
    B:先获取自增主键的ID,获取方法是:cur.自增主键字段,然后在sql中显示绑定,sql中要带上自增主键字段
    2、插入的字符串前有0时,如果不做处理,插入到表中的记录会将字符串前面的0舍去,在实际绑定值时,在绑定变量前后加上单引号既可,如:"'"+stock_code+"'"
    4、批量绑定
    实际使用过程中,单条操作往往比较慢,需要使用批量绑定,即在插入数据库时对绑定参数进行批量绑定,示例如下:
    sql="insert down_task(stock_code, down_type,task_status,complate_date,create_date,list_date) values('002332',2,1,now(),now(),2010),('002332',2,1,now(),now(),2010)"
        conn = pymysql.connect(host=MYSQL_IP,port=MYSQL_PORT,user=MYSQL_USER,passwd=MYSQL_PWD,db=MYSQL_DATABASE,charset=MYSQL_ENCODE)
        try:
            cur = conn.cursor()
            cur.execute(sql)
            conn.commit()
            conn.close()
        except:
            print '##################insert task compate failed,rollback###############'
            conn.rollback()
            conn.close()
            return False

    5、删除操作

    delsql = "delete from down_task where stock_code=%s"
    conn = pymysql.connect(host=MYSQL_IP,port=MYSQL_PORT,user=MYSQL_USER,passwd=MYSQL_PWD,db=MYSQL_DATABASE,charset=MYSQL_ENCODE)
        try:
            cur = conn.cursor()
            cur.execute(delsql % ("'"+'2332'+"'"))
            conn.commit()
            conn.close()
        except:
            print '##################insert task compate failed,rollback###############'
            conn.rollback()
            conn.close()
            return False

    6、调用无参数存储过程

    conn = pymysql.connect(host=MYSQL_IP,port=MYSQL_PORT,user=MYSQL_USER,passwd=MYSQL_PWD,db=MYSQL_DATABASE,charset=MYSQL_ENCODE)
    #游标设置为字典类型
    cursor = conn.cursor()
    #无参数存储过程
    cursor.callproc('p2')    #等价于cursor.execute("call p2()")
    row_1 = cursor.fetchone()
    print row_1
    conn.commit()
    cursor.close()
    conn.close()

    7、调用有参数存储过程

    conn = pymysql.connect(host=MYSQL_IP,port=MYSQL_PORT,user=MYSQL_USER,passwd=MYSQL_PWD,db=MYSQL_DATABASE,charset=MYSQL_ENCODE)
    cursor = conn.cursor()
    cursor.callproc('p1', args=(1, 22, 3, 4))
    #获取执行完存储的参数,参数@开头
    cursor.execute("select @p1,@_p1_1,@_p1_2,@_p1_3")   #{u'@_p1_1': 22, u'@p1': None, u'@_p1_2': 103, u'@_p1_3': 24}
    row_1 = cursor.fetchone()
    print row_1
    conn.commit()
    cursor.close()
    conn.close()

    四、总结

    本文纸堆pymysql的常用使用方法和遇到过的坑进行总结,如有问题请大家批评指正.
  • 相关阅读:
    Android 新建项目报错(CANNOT RESOLVE SYMBOL R)
    GIT相关
    Java 语言基础
    StarUML
    public static void main(String[] args)的理解
    软件安装以及环境搭配
    基础
    字符串的格式化
    python里的正则表达式
    集合
  • 原文地址:https://www.cnblogs.com/newzol/p/8733889.html
Copyright © 2011-2022 走看看