Python造輪子 連線資料庫

2021-10-16 23:11:39 字數 3106 閱讀 5169

# 資料庫資訊

databases =

,'read_default':}

# 資料庫型別列表, 這裡主要是為了規範化資料庫型別的命名

db_type_list =

['mysql'

,'pg'

]# 資料庫型別異常

db_type_is_error =

'{}, 該資料庫型別不存在,請確認'

# 資料鏈結不存在

db_conn_is_none =

'資料庫鏈結不存在,請確認'

# 方法未例項化異常

method_must_be_overwrite =

'方法 {} 必須被重寫'

class

dbutilbase

(object):

""" 封裝資料庫操作

"""db_type =

none

db_conn =

none

db_cursor =

none

def__init__

(self, db_type)

:if db_type not

in db_type_list:

raise exception(db_type_is_error.

format

(db_type)

) self.db_type = db_type

self.set_cursor(

)def

__del__

(self)

:try

:if self.db_cursor:

self.db_cursor.close(

)if self.db_conn:

self.db_conn.close(

)except exception as e:

pass

defclose_conn

(self)

:try

:if self.db_cursor:

self.db_cursor.close(

)if self.db_conn:

self.db_conn.close(

)except exception as e:

pass

defcommit_conn

(self)

:if self.db_conn:

self.db_conn.commit(

)def

set_conn_by_tag

(self, db_tag=

'default'):

""" 子類中, 該方法必須被重寫

"""raise exception(method_must_be_overwrite.

format

(__name__)

)def

set_cursor

(self)

:"""

獲取游標

"""self.set_conn_by_tag(

) self.db_cursor = self.db_conn.cursor(

)def

get_all

(self, do_sql)

:"""

執行sql並獲取所有執行結果

"""self.db_cursor.execute(do_sql)

return self.db_cursor.fetchall(

)def

get_one

(self, do_sql)

:"""

執行sql並獲取所有第一條結果

"""self.db_cursor.execute(do_sql)

return self.db_cursor.fetchone(

)def

execute_sql

(self, do_sql, do_data=

none

, commit=

true):

""" 執行sql

"""if do_data:

sql_result = self.db_cursor.execute(do_sql, do_data)

else

: sql_result = self.db_cursor.execute(do_sql)

if commit:

self.commit_conn(

)return sql_result

class

dbpgutil

(dbutilbase)

:"""

pg資料庫的初始化

"""def__init__

(self)

:super

(dbpgutil, self)

.__init__(

'pg'

)def

set_conn_by_tag

(self, db_tag=

'default'):

""" 根據標籤設定資料庫鏈結

標籤來自, erp/setting.py 中的 databases

"""import psycopg2

db_info = databases[db_tag]

self.db_conn = psycopg2.connect(

database=db_info[

'name'

], host=db_info[

'host'

], port=db_info[

'port'],

user=db_info[

'user'

], password=db_info[

'password'])

if __name__ ==

'__main__'

: db_tool = dbpgutil(

) search_sql =

'select now()'

result = db_tool.get_all(search_sql)

print

(result)

造輪子之資料庫連線池

執行緒池談談我自己的理解吧 先建立固定數量的連線,之後放在乙個容器中 使用時從容器中拿 容器中的連線數量少於等於0,所有獲取連線的動作等待 容器中的連線數量大於0,則獲取連線,在連線用完之後就返回到容器中 針對以上的理解,在程式設計中可以這樣實現 使用 在使用者獲取con時,我們返回的是 後的con...

python 連線資料庫

原文 原文1 安裝mysql python pip install mysql python dome1 def db mange db bank conn none try 開啟資料庫連線 conn mysqldb.connect localhost root 123456 db bank 獲取操...

Python連線資料庫

usr bin env python coding utf 8 import sys reload sys sys.setdefaultencoding utf 8 import pymysql import pymysql.cursors usr bin env python coding utf...