# 資料庫資訊
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...