標籤: 數據庫 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()