首頁  >  文章  >  資料庫  >  pymysql 操作資料庫

pymysql 操作資料庫

高洛峰
高洛峰原創
2016-12-02 16:44:561324瀏覽

一.簡介 

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

 其執行語句與二〜其執行語句與二頭原始碼相似.使用

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()

  先來一例完整的連接加基本的操作是主動回傳

#!/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.資料庫作業

查詢資料,Petchyt使用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中定義了一些資料庫操作的錯誤及異常,下表列出了這些錯誤和異常:

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn