PyMySQL 使用筆記

標籤: 數據庫 python


connections 模塊

類:Connection

  • 用法:執行 pymysql.connect() 得到。而不是構造函數 Connection()
  • pymysql.connect() 的參數即爲 Connection() 構造函數的參數。
  • 構造函數:
pymysql.connections.Connection(self,
    host=None,          # 要連接的主機地址
    user=None,          # 用於登錄的數據庫用戶
    password='',        # 密碼
    database=None,      # 要連接的數據庫
    port=0,             # 端口,一般爲 3306
    unix_socket=None,   # 選擇是否要用unix_socket而不是TCP/IP
    charset='',         # 字符編碼
    sql_mode=None,      # Default SQL_MODE to use.
    read_default_file=None, # 從默認配置文件(my.ini或my.cnf)中讀取參數
    conv=None,          # 轉換字典
    use_unicode=None,   # 是否使用 unicode 編碼
    client_flag=0,      # Custom flags to send to MySQL. Find potential values in constants.CLIENT.
    cursorclass=<class 'pymysql.cursors.Cursor'>, # 選擇 Cursor 類型
    init_command=None,  # 連接建立時運行的初始語句 
    connect_timeout=10, # 連接超時時間,(default: 10, min: 1, max: 31536000)
    ssl=None,           # A dict of arguments similar to mysql_ssl_set()'s parameters.For now the capath and cipher arguments are not supported. 
    read_default_group=None, # Group to read from in the configuration file.
    compress=None,      # 不支持
    named_pipe=None,    # 不支持
    no_delay=None,      # 
    autocommit=False,   # 是否自動提交事務
    db=None,            # 同 database,爲了兼容 MySQLdb
    passwd=None,        # 同 password,爲了兼容 MySQLdb
    local_infile=False, # 是否允許載入本地文件
    max_allowed_packet=16777216, # 限制 `LOCAL DATA INFILE` 大小
    defer_connect=False, # Don't explicitly connect on contruction - wait for connect call.
    auth_plugin_map={}, #
    read_timeout=None,  # 
    write_timeout=None, 
    bind_address=None   # 當客戶有多個網絡接口,指定一個連接到主機
    )
  • 重要函數
函數 說明
cursor(cursor = None) 創建一個遊標
commit() 事務提交,如果沒有設爲自動提交,則每次操作後必須提交事務,否則操作無效。
rollback() 操作出錯時,可以用這個函數回滾到執行事務之前
close() 關閉連接

- 一個例子

import pymysql.cursors

config = {
          'host':'127.0.0.1',
          'port':3306,
          'user':'root',
          'password':'xinxin2333',
          'database':'trade_ms',
          'charset':'utf8mb4',
          'cursorclass':pymysql.cursors.Cursor,
          }

# 連接數據庫
connection = pymysql.connect(**config)

cursors 模塊

類 : Cursor

  • 使用 connections.Connection.cursor() 得到,而不是這個類的構造函數
  • connections.Connection.cursor()的參數是 cursor 的類型。
  • 重要函數
函數 說明
callproc(procname, args=()) 執行一個過程
execute(query,args=None) 執行一條SQL語句,返回受影響的行數。若args是列表,用%s做佔位符,若是字典,用%(name)s
executemany(query,args) 對一個操作運行多個數據,如一次插入多條數據
fetchall() 取出操作返回的所有的行
fetchone() 取出一行
fetchmany(size=None) 取出 size 行
close() 關閉這個遊標對象

- 遊標類型

類名 說明
Cursor 默認類型,查詢返回list
DictCursor 與Cursor不同的地方是,查詢返回dict,包括屬性名
SSCursor 查詢不會返回所有的行,而是按需求返回
SSDictCursor 差別同前兩個
  • 舉例說明
#Cursor 查詢返回
(10000, 't恤男短袖', 28, Decimal('89.00'), 300) 
#DictCursor 查詢返回
{'cid': 10000, 'cname': 't恤男短袖', 'claid': 28, 'price': Decimal('89.00'), 'cnum': 300}
  • 一個例子
#!python3
#-*- coding: utf-8 -*-

import pymysql.cursors      # 好像import這個模塊就可以了

config = {
          'host':'127.0.0.1',
          'port':3306,
          'user':'root',
          'password':'xinxin2333',
          'database':'trade_ms',
          'charset':'utf8mb4',
          'cursorclass':pymysql.cursors.Cursor,
          }

connection = pymysql.connect(**config)  # 連接數據庫

try:
    with connection.cursor() as cursor:
        sql = 'SELECT * FROM commodity WHERE price > 100 ORDER BY price'
        count = cursor.execute(sql) # 影響的行數
        print(count)
        result = cursor.fetchall()  # 取出所有行

        for i in result:            # 打印結果
            print(i)
        connection.commit()         # 提交事務
except:
    connection.rollback()           # 若出錯了,則回滾

finally:
    connection.close()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章