python 游標 MySQL連線池 設計表

2021-08-11 03:35:04 字數 2297 閱讀 5146

游標

游標是系統為使用者開設的乙個資料緩衝區,存放 sql 語句的執行結果,用法如下:

in [1]: import mysqldb

in [2]: c = mysqldb.connect(user='root', passwd='pzk123', db='mysql') # 連線資料庫

in [3]: cus = c.cursor() # 建立乙個游標物件

in [4]: cus.execute('select * from user;') # 使用execute()方法可以執行sql語句,執行後的結果會存在緩衝區

out[4]: 4l

in [5]: result1 = cus.fetchone() # 可以使用fetchone()來檢視緩衝區的一條記錄

in [6]: result2 = cus.fetchmany(3) # 可以使用fetchmany()來檢視緩衝區的多條記錄

in [7]: result3 = cus.fetchall() # 可以使用fetchall()來檢視所有的記錄

示例:#!/usr/bin/env python

import mysqldb

def connect_mysql():

db_config =

c = mysqldb.connect(**db_config)

return c

if __name__ == '__main__':

c = connect_mysql() # 首先連線資料庫

cus = c.cursor() # 生成游標物件

sql = 'drop database test;' # 定義要執行的sql語句

try:

cus.execute(sql) # 執行sql語句

c.commit() # 如果執行成功就提交事務

except exception as e:

c.rollback() # 如果執行失敗就回滾事務

raise e

finally:

c.close() # 最後記得關閉資料庫連線

from dbutils.pooleddb import pooleddb

db_config =

pool = pooleddb(mysqldb, 5, **db_config) # 5為連線池裡的最少連線數

conn = pool.connection() # 以後每次需要資料庫連線就是用connection()函式獲取連線就好了

cur = conn.cursor()

sql = "select * from tmp;"

r = cur.execute(sql)

r = cur.fetchall()

print(r)

cur.close()

conn.close()

pooleddb的引數:

1. mincached,最少的空閒連線數,如果空閒連線數小於這個數,pool會建立乙個新的連線

2. maxcached,最大的空閒連線數,如果空閒連線數大於這個數,pool會關閉空閒連線

3. maxconnections,最大的連線數,

4. blocking,當連線數達到最大的連線數時,在請求連線的時候,如果這個值是true,請求連線的程式會一直等待,直到當前連線數小於最大連線數,如果這個值是false,會報錯,

5. maxshared 當連線數達到這個數,新請求的連線會分享已經分配出去的連線

在uwsgi中,每個http請求都會分發給乙個程序,連線池中配置的連線數都是乙個程序為單位的(即上面的最大連線數,都是在乙個程序中的連線數),而如果業務中,乙個http請求中需要的sql連線數不是很多的話(其實大多數都只需要建立乙個連線),配置的連線數配置都不需要太大。

連線池對效能的提公升表現在:

1.在程式建立連線的時候,可以從乙個空閒的連線中獲取,不需要重新初始化連線,提公升獲取連線的速度

2.關閉連線的時候,把連線放回連線池,而不是真正的關閉,所以可以減少頻繁地開啟和關閉連線

設計表結構

在操作設計資料庫之前,我們先要設計資料庫表結構,根據實際業務之間物件的關係,我們先來分析各個主體他們直接有什麼屬性,並確定表結構,在實際開發過程中,根據自己的業務需要和屬性,設計不同的表結構。

MySQL 游標 游標

游標cursor是用來儲存查詢結果集的 資料型別 在儲存過程和函式中可以使用游標對結果集進行迴圈的處理。游標的使用包括游標的宣告 open fetch 和 close,其語法分別如下 宣告游標 declare cursor name cursor for select statement open ...

mysql游標型別 MySQL 游標

drop procedure if exists processorders create procedure processorders begin declare done boolean default 0 declare a int declare b varchar 20 定義游標遍歷時,...

mysql隱式游標 MYSQL 游標 動態游標示例

mysql沒有隱式和顯式游標之分,所用的游標都是顯式游標,也就是必須要進行定義游標變數,然後按照正規的流程使用,開啟 遍歷 關閉。以下是具體的使用方法。游標定義 1.declare cursor name cursor for select statement 游標操作 open 開啟游標 1.op...