do与mysql数据类型对照_dophon-db: dophon框架的数据库模块,支持mysql,sqlite数据库,带有orm持久化功能与链式操作实例,贴近逻辑习惯,支持mysql多数据源配置...
dophon-db
項(xiàng)目介紹
dophon框架的數(shù)據(jù)庫(kù)模塊,也可單獨(dú)作為一個(gè)與數(shù)據(jù)庫(kù)模塊交互的部件
支持mysql數(shù)據(jù)庫(kù)連接
支持orm形式的數(shù)據(jù)操作
如有疑問(wèn)請(qǐng)發(fā)送郵件聯(lián)系作者:ealohu@163.com
軟件架構(gòu)
模塊架構(gòu)分為以組件:
mysql連接組件(包括連接池,連接封裝類(lèi),分頁(yè),結(jié)果輸出過(guò)濾器,遠(yuǎn)程接收器,增量檢測(cè))
orm映射組件(包括映射基礎(chǔ)結(jié)構(gòu)定義,映射封裝工具,映射操作定義)
抽象工具集(包括結(jié)果集文件讀取,解析,熱更新,動(dòng)態(tài)賦值等)
多數(shù)據(jù)源(xml,orm)管理器,已內(nèi)嵌到相應(yīng)模塊中
安裝教程
pip安裝:
pip install dophon-db [--user]
使用說(shuō)明
0. 配置相關(guān)
# 此處為數(shù)據(jù)庫(kù)配置
pool_conn_num = 5 # size of db connect pool() # 數(shù)據(jù)庫(kù)連接池連接數(shù)(默認(rèn)5個(gè))
pydc_host = 'localhost' # 數(shù)據(jù)庫(kù)連接地址
pydc_port = 3306 # 數(shù)據(jù)庫(kù)連接端口
pydc_user = 'username' # 數(shù)據(jù)庫(kù)連接用戶名
pydc_password = 'password' # 數(shù)據(jù)庫(kù)連接密碼
pydc_database = 'database' # 連接數(shù)據(jù)庫(kù)名(可在后面跟連接參數(shù))
pydc_xmlupdate_sech = False # 結(jié)果集映射調(diào)度開(kāi)關(guān)
db_pool_exe_time = False # 連接池執(zhí)行時(shí)間調(diào)試開(kāi)關(guān)
# 多數(shù)據(jù)源配置(數(shù)據(jù)庫(kù)表創(chuàng)建請(qǐng)看test/test.sql)
db_cluster = [
{
'alias': 'data-a',
'host': 'localhost',
'port': 3306,
'database': 'test1',
'user': 'root',
'password': 'root'
}, {
'alias': 'data-b',
'host': 'localhost',
'port': 3306,
'database': 'test2',
'user': 'root',
'password': 'root'
}, {
'alias': 'data-c',
'host': 'localhost',
'port': 3306,
'database': 'test3',
'user': 'root',
'password': 'root',
'tables':['a','user']
}, {
'alias': 'data-d',
'host': 'localhost',
'port': 3306,
'database': 'test4',
'user': 'root',
'password': 'root'
}
]
1. 結(jié)果集映射方式
結(jié)果集:sql執(zhí)行腳本的一個(gè)集合,由于在實(shí)際開(kāi)發(fā)中查詢居多,簡(jiǎn)稱結(jié)果集
通過(guò)xml文件規(guī)范若干結(jié)果集組成
mysql.xml
SELECT
*
FROM
table
通過(guò)代碼關(guān)聯(lián)xml文件,初始化結(jié)果集
from dophon.mysql import *
_cursor=db_obj(mysql.xml,auto_fix=True)
# 根路徑為配置文件路徑
# 文件路徑必須以/開(kāi)頭
通過(guò)代碼獲取xml文件其中某一個(gè)結(jié)果集(以id區(qū)分)
result= _cursor.exe_sql(methodName='findAll')
支持動(dòng)態(tài)參數(shù)傳入(#{}形式)以及骨架參數(shù)傳入(${形式})
動(dòng)態(tài)參數(shù)傳入:
SELECT
*
FROM
table
WHERE
id=#{id}
result= _cursor.exe_sql(methodName='findAllById',args={'id':'12345678'})
骨架參數(shù)傳入:
SELECT
*
FROM
${table_name}
result= _cursor.exe_sql(methodName='findAllByTableName',args={'table_name':'test_table'})
支持單條查詢,列表查詢,隊(duì)列查詢(結(jié)果集id與參數(shù)列表的列表形式和字典形式)
單條查詢:
SELECT
*
FROM
table
WHERE
id=#{id}
result= _cursor.exe_sql_single(methodName='findAllById',args={'id':'12345678'})
# result
列表查詢:
SELECT
*
FROM
table
WHERE
id=#{id}
result= _cursor.exe_sql(methodName='findAllById',args={'id':'12345678'})
# result
隊(duì)列查詢:
1.列表形式:
result= _cursor.exe_sql_queue(
method_queue=['test1','test2'],
args_queue=[
{'id':'123456','name':'tom'},
{}
]
)
# result
# {
# method_name:exec_result
# }
2.字典形式:
result= _cursor.exe_sql_obj_queue(
queue_obj={
'test1':{
'id':'123456'
},
'test2':{}
}
)
# result
# {
# method_name:exec_result
# }
支持結(jié)果集文件熱更新
update_round(_cursor,1)
# update_round(,second:int)
支持遠(yuǎn)程維護(hù)結(jié)果集文件
# remote_path為xml文件下載地址
remote_cell = remote.get_cell('test.xml', remote_path='http://127.0.0.1:8400/member/export/xml/test.xml')
_cursor = db_obj(remote_cell.getPath(), debug=True)
# 或者
_cursor = db_obj(remote_cell, debug=True)
2. 表模型映射方式
暫時(shí)支持單條事務(wù)操作
通過(guò)初始化模型管理器獲取數(shù)據(jù)庫(kù)表映射骨架
from dophon import orm
manager = orm.init_orm_manager(['user'])
通過(guò)實(shí)例化映射骨架獲取表操作緩存實(shí)例(操作實(shí)例)
user = manager.user()
通過(guò)對(duì)操作實(shí)例賦值進(jìn)行對(duì)對(duì)應(yīng)表模擬操作
print('打印對(duì)象變量域')
for attr in dir(user):
print(attr, ":", eval("user." + attr))
print('開(kāi)始對(duì)對(duì)象賦值')
user.user_id = 'id'
user.info_id = 'info_id'
user.user_name = 'user_name'
user.user_pwd = 'user_pwd'
user.user_status = 123
user.create_time = datetime.datetime.now().strftime('%y-%m-%d')
user.update_time = datetime.datetime.now().strftime('%y-%m-%d')
print('對(duì)象賦值完畢')
print('打印對(duì)象變量域')
for attr in dir(user):
print(attr, ":", eval("user." + attr))
print('打印對(duì)象參數(shù)表')
print(user([]))
print('user([]):', user([]))
print("user(['user_id','info_id']):", user(['user_id', 'info_id']))
print("user.get_field_list():", user.get_field_list())
print("user.alias('user_table').get_field_list():", user.alias('user_table').get_field_list())
通過(guò)對(duì)操作實(shí)例結(jié)構(gòu)化操作對(duì)數(shù)據(jù)庫(kù)對(duì)應(yīng)表結(jié)構(gòu)進(jìn)行數(shù)據(jù)落地操作
# 打印對(duì)象操作語(yǔ)句(內(nèi)部方法)
print(user.where())
print(user.values())
user.select() # 執(zhí)行對(duì)象查詢操作(未賦值對(duì)象執(zhí)行全部查詢)
user.user_name = '111' # 對(duì)對(duì)象某一屬性賦值
user.select_one() # 執(zhí)行單條條件查詢(條件為對(duì)象已有值),復(fù)數(shù)結(jié)果時(shí)拋出異常
user.select_all() # 執(zhí)行全部條件查詢(條件為對(duì)象已有值)
user = manager.user() # 獲取另一個(gè)模型對(duì)象
user.alias('u').select() # 對(duì)對(duì)象賦予別名并執(zhí)行全部查詢操作
user.user_name = '111' # 對(duì)對(duì)象某一屬性賦值
user.alias('us').select_one() # 對(duì)對(duì)象賦予另一個(gè)別名并執(zhí)行全部查詢操作
user.alias('userr').select_all() # 對(duì)對(duì)象賦予另一個(gè)別名并執(zhí)行全部查詢操作
# 對(duì)對(duì)象某一屬性賦值(屬性類(lèi)型與數(shù)據(jù)庫(kù)類(lèi)型相對(duì)應(yīng))
user.user_id='test_id' # 字符串類(lèi)型
user.info_id='test_info_id'
user.user_name='test_user_name'
user.user_pwd='test_user_pwd'
user.user_status=1 # 數(shù)字類(lèi)型
user.create_time = datetime.datetime.now().strftime('%y-%m-%d') # 日期類(lèi)型
user.update_time = datetime.datetime.now().strftime('%y-%m-%d')
print(user.insert()) # 執(zhí)行對(duì)象插入操作并打印操作結(jié)果
# 對(duì)對(duì)象某一屬性賦值并選擇其中某部分屬性進(jìn)行更新,其中指定了執(zhí)行更新查詢條件
user.user_id = 'test_id'
user.info_id = 'info_id'
user.user_name = '柯李藝'
user.user_pwd = '333'
user.user_status = 123
print(user.update(update=['user_name','user_pwd'],where=['user_id']))
# 對(duì)對(duì)象某一屬性賦值并指定刪除條件進(jìn)行刪除操作
user.user_id = 'test_id'
user.info_id = 'info_id'
user.user_name = 'user_name'
user.user_pwd = 'user_pwd'
user.user_status = 123
print(user.delete(where=['user_id']))
# 獲取兩個(gè)新的模型對(duì)象
user1=manager.user()
user2=manager.user()
# 打印對(duì)象1的全部查詢結(jié)果
print(user1.select())
# 對(duì)對(duì)象1屬性賦值
user1.user_name='early'
# 執(zhí)行對(duì)象1左關(guān)聯(lián)對(duì)象2,并指定關(guān)聯(lián)關(guān)系(user1.user_id = user2.user_id)
user1.left_join(user2,['user_id'],['user_id'])
# 執(zhí)行對(duì)象1左關(guān)聯(lián)對(duì)象2,指定對(duì)象1別名(u1),對(duì)象2別名(u2),并指定關(guān)聯(lián)關(guān)系(user1.user_id = user2.user_id)
user1.alias('u1').left_join(user2.alias('u2'),['user_id'],['user_id'])
# print(user1.exe_join())
# 打印對(duì)象1關(guān)聯(lián)后的全部查詢結(jié)果
print(user1.select())
"""
模型對(duì)象的復(fù)制與生成
"""
# 獲取新的模型操作對(duì)象
user1 = manager.user()
print('user1', '---', id(user1)) # 打印對(duì)象1的id
user2 = user1.copy_to_obj(manager.user) # 利用對(duì)象管理器實(shí)例中的模型模板進(jìn)行對(duì)象獲取
print('user2', '---', id(user2)) # 打印對(duì)象2的id
print(user1('user_id'))
user3 = user1.read_from_dict({
'user_id': '111'
}) # 利用模型對(duì)象中的翻譯方法將字典生成一個(gè)新的模型對(duì)象
print('user3', '---', id(user3)) # 打印對(duì)象3的id
# 對(duì)比兩者id
print(user1('user_id'))
print(user3('user_id'))
參與貢獻(xiàn)
若有意向參與貢獻(xiàn),請(qǐng)留言或發(fā)送郵件至ealohu@163.com
Fork 本項(xiàng)目
新建 Feat_xxx 分支
提交代碼
新建 Pull Request
總結(jié)
以上是生活随笔為你收集整理的do与mysql数据类型对照_dophon-db: dophon框架的数据库模块,支持mysql,sqlite数据库,带有orm持久化功能与链式操作实例,贴近逻辑习惯,支持mysql多数据源配置...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: boot spring 没有父子容器_S
- 下一篇: mysql 重置密码语音_数字语音信号处