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的常用使用方法和遇到過的坑進行總結,如有問題請大家批評指正.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM