pymysql 操作數據庫

一.簡介?

  pymsql是Python中操作MySQL的模塊,其使用方法和MySQLdb幾乎相同,但目前pymysql支持python3.x而后者不支持3.x版本

  其執行語句與sql源碼相似

二.使用

1.安裝

?  pip install pymysql

2.使用操作

  先來一例完整的連接加基本的操作

import?pymysql  ??  #?創建連接  conn?=?pymysql.connect(host='127.0.0.1',?port=3306,?user='root',?passwd='123',?db='t1')  #?創建游標  cursor?=?conn.cursor()  ??  #?執行SQL,并返回收影響行數  effect_row?=?cursor.execute("update?hosts?set?host?=?'1.1.1.2'")  ??  #?執行SQL,并返回受影響行數  #effect_row?=?cursor.execute("update?hosts?set?host?=?'1.1.1.2'?where?nid?>?%s",?(1,))  ??  #?執行SQL,并返回受影響行數  #effect_row?=?cursor.executemany("insert?into?hosts(host,color_id)values(%s,%s)",?[("1.1.1.11",1),("1.1.1.11",2)])  ??  ??  #?提交,不然無法保存新建或者修改的數據  conn.commit()  ??  #?關閉游標  cursor.close()  #?關閉連接  conn.close()

向數據庫插入數據,使用try語句,當出現異常是主動回滾

#!/usr/bin/python3    import?pymysql    #?打開數據庫連接  db?=?pymysql.connect("localhost","testuser","test123","TESTDB"?)    #?使用cursor()方法獲取操作游標?  cursor?=?db.cursor()    #?SQL?插入語句  sql?=?"""INSERT?INTO?EMPLOYEE(FIRST_NAME,  ?????????LAST_NAME,?AGE,?SEX,?INCOME)  ?????????VALUES?('Mac',?'Mohan',?20,?'M',?2000)"""  try:  ???#?執行sql語句  ???cursor.execute(sql)  ???#?提交到數據庫執行  ???db.commit()  except:  ???#?如果發生錯誤則回滾  ???db.rollback()    #?關閉數據庫連接  db.close()

3.向數據表中插入多條數據,使用executemany方法,在生產環境中插入多條數據 ,在后臺中獲取數據后,以列表的形式傳入語句([(‘v1′,’v2’),(‘v3′,’v4’)])

#?創建連接  conn?=?pymysql.connect(host='127.0.0.1',?port=3306,?user='root',?passwd='123',?db='t1')  #?創建游標  cur?=?conn.cursor()  ?if?request.method?==?"POST":  ????????title?=?request.POST.get("title")  ????????title_en?=?request.POST.get("title_en")  ????????content?=?request.POST.get("content")  ????????content_en?=?request.POST.get("content_en")  ????????notification_type?=request.POST.get("notification_type").strip()  ????????user_list?=?request.POST.get("user_list")  ????????updated_datetime?=?datetime.now()  ????????created_datetime?=?datetime.now()  ????????values_list?=?[]  ?????????for?user?in?user_id_list:  ????????????????temp?=?updated_datetime,created_datetime,title,title_en,content,content_en,notification_type,user['id']  ????????????????values_list.append((temp))       try:  ????????  cur.executemany('''insert?into?app_notification(updated_datetime,?created_datetime,?title,?title_en,  ??????????????????????????????????content,?content_en,?notification_type,?is_read,?recipient_id)  ??????????????????????values(%s,?%s,?%s,?%s,?%s,?%s,?%s,?0,?%s)''',values_list)  ????????????conn.commit()  ????????????conn.close()             except?Exception?as?err:  ????    conn.rollback()  ????    logging.error(err)  ????    logging.error(traceback.format_exc())  ????    conn.close()

# 獲取最新自增ID

  new_id =?cursor.lastrowid

4.數據庫查詢操作

Python查詢Mysql使用 fetchone() 方法獲取單條數據, 使用fetchall() 方法獲取多條數據。

fetchone():?該方法獲取下一個查詢結果集。結果集是一個對象

fetchall():?接收全部的返回結果行.

rowcount:?這是一個只讀屬性,并返回執行execute()方法后影響的行數。

import?pymysql  ??  conn?=?pymysql.connect(host='127.0.0.1',?port=3306,?user='root',?passwd='123',?db='t1')  cursor?=?conn.cursor()  cursor.execute("select?*?from?hosts")  ??  #?獲取第一行數據  row_1?=?cursor.fetchone()  ??  #?獲取前n行數據  #?row_2?=?cursor.fetchmany(3)  #?獲取所有數據  #?row_3?=?cursor.fetchall()  ??  conn.commit()  cursor.close()  conn.close()

注:在fetch數據時按照順序進行,可以使用cursor.scroll(num,mode)來移動游標位置,如:

cursor.scroll(1,mode=’relative’) ?# 相對當前位置移動

cursor.scroll(2,mode=’absolute’) # 相對絕對位置移動

5。fetch數據類型

  關于默認獲取的數據是元祖類型,如果想要或者字典類型的數據,即:

#!/usr/bin/env?python  #?-*-?coding:utf-8?-*-  import?pymysql  ??  conn?=?pymysql.connect(host='127.0.0.1',?port=3306,?user='root',?passwd='123',?db='t1')  ??  #?游標設置為字典類型  cursor?=?conn.cursor(cursor=pymysql.cursors.DictCursor)  r?=?cursor.execute("call?p1()")  ??  result?=?cursor.fetchone()  ??  conn.commit()  cursor.close()  conn.close()

錯誤處理

DB API中定義了一些數據庫操作的錯誤及異常,下表列出了這些錯誤和異常:

pymysql 操作數據庫

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享