1. 程式人生 > >pymysql安裝和使用

pymysql安裝和使用

引號 安裝 datetime 批量 () eat 獲取自增 toc etc

一、pymysql安裝

安裝mymysql前請確認python環境已經準備好,在之前的博文http://www.cnblogs.com/newzol/p/8682176.html有說明pythonweb環境的安裝,如果已經具備了,那麽在安裝pymysql就變的簡單了.只要做如下處理: wget https://pypi.python.org/packages/29/f8/919a28976bf0557b7819fd6935bfd839118aff913407ca58346e14fa6c86/PyMySQL-0.7.11.tar.gz#md5=167f28514f4c20cbc6b1ddf831ade772 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的常用使用方法和遇到過的坑進行總結,如有問題請大家批評指正.

pymysql安裝和使用