do與mysql數據類型對照_dophon-db: dophon框架的數據庫模塊,支持mysql,sqlite數據庫,帶有orm持久化功能與鏈式操作實例,貼近邏輯習慣,支持mysql多數據源配置...

dophon-db

項目介紹

dophon框架的數據庫模塊,也可單獨作為一個與數據庫模塊交互的部件

支持mysql數據庫連接

支持orm形式的數據操作

如有疑問請發送郵件聯系作者:ealohu@163.com

軟件架構

模塊架構分為以組件:

mysql連接組件(包括連接池,連接封裝類,分頁,結果輸出過濾器,遠程接收器,增量檢測)

orm映射組件(包括映射基礎結構定義,映射封裝工具,映射操作定義)

抽象工具集(包括結果集文件讀取,解析,熱更新,動態賦值等)

多數據源(xml,orm)管理器,已內嵌到相應模塊中

安裝教程

pip安裝:

pip install dophon-db [--user]

使用說明

0. 配置相關

# 此處為數據庫配置

pool_conn_num = 5 # size of db connect pool() # 數據庫連接池連接數(默認5個)

pydc_host = 'localhost' # 數據庫連接地址

pydc_port = 3306 # 數據庫連接端口

pydc_user = 'username' # 數據庫連接用戶名

pydc_password = 'password' # 數據庫連接密碼

pydc_database = 'database' # 連接數據庫名(可在后面跟連接參數)

pydc_xmlupdate_sech = False # 結果集映射調度開關

db_pool_exe_time = False # 連接池執行時間調試開關

# 多數據源配置(數據庫表創建請看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. 結果集映射方式

結果集:sql執行腳本的一個集合,由于在實際開發中查詢居多,簡稱結果集

通過xml文件規范若干結果集組成

mysql.xml

SELECT

*

FROM

table

通過代碼關聯xml文件,初始化結果集

from dophon.mysql import *

_cursor=db_obj(mysql.xml,auto_fix=True)

# 根路徑為配置文件路徑

# 文件路徑必須以/開頭

通過代碼獲取xml文件其中某一個結果集(以id區分)

result= _cursor.exe_sql(methodName='findAll')

支持動態參數傳入(#{}形式)以及骨架參數傳入(${形式})

動態參數傳入:

SELECT

*

FROM

table

WHERE

id=#{id}

result= _cursor.exe_sql(methodName='findAllById',args={'id':'12345678'})

骨架參數傳入:

SELECT

*

FROM

${table_name}

result= _cursor.exe_sql(methodName='findAllByTableName',args={'table_name':'test_table'})

支持單條查詢,列表查詢,隊列查詢(結果集id與參數列表的列表形式和字典形式)

單條查詢:

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

隊列查詢:

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

# }

支持結果集文件熱更新

update_round(_cursor,1)

# update_round(,second:int)

支持遠程維護結果集文件

# 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. 表模型映射方式

暫時支持單條事務操作

通過初始化模型管理器獲取數據庫表映射骨架

from dophon import orm

manager = orm.init_orm_manager(['user'])

通過實例化映射骨架獲取表操作緩存實例(操作實例)

user = manager.user()

通過對操作實例賦值進行對對應表模擬操作

print('打印對象變量域')

for attr in dir(user):

print(attr, ":", eval("user." + attr))

print('開始對對象賦值')

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('對象賦值完畢')

print('打印對象變量域')

for attr in dir(user):

print(attr, ":", eval("user." + attr))

print('打印對象參數表')

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())

通過對操作實例結構化操作對數據庫對應表結構進行數據落地操作

# 打印對象操作語句(內部方法)

print(user.where())

print(user.values())

user.select() # 執行對象查詢操作(未賦值對象執行全部查詢)

user.user_name = '111' # 對對象某一屬性賦值

user.select_one() # 執行單條條件查詢(條件為對象已有值),復數結果時拋出異常

user.select_all() # 執行全部條件查詢(條件為對象已有值)

user = manager.user() # 獲取另一個模型對象

user.alias('u').select() # 對對象賦予別名并執行全部查詢操作

user.user_name = '111' # 對對象某一屬性賦值

user.alias('us').select_one() # 對對象賦予另一個別名并執行全部查詢操作

user.alias('userr').select_all() # 對對象賦予另一個別名并執行全部查詢操作

# 對對象某一屬性賦值(屬性類型與數據庫類型相對應)

user.user_id='test_id' # 字符串類型

user.info_id='test_info_id'

user.user_name='test_user_name'

user.user_pwd='test_user_pwd'

user.user_status=1 # 數字類型

user.create_time = datetime.datetime.now().strftime('%y-%m-%d') # 日期類型

user.update_time = datetime.datetime.now().strftime('%y-%m-%d')

print(user.insert()) # 執行對象插入操作并打印操作結果

# 對對象某一屬性賦值并選擇其中某部分屬性進行更新,其中指定了執行更新查詢條件

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']))

# 對對象某一屬性賦值并指定刪除條件進行刪除操作

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']))

# 獲取兩個新的模型對象

user1=manager.user()

user2=manager.user()

# 打印對象1的全部查詢結果

print(user1.select())

# 對對象1屬性賦值

user1.user_name='early'

# 執行對象1左關聯對象2,并指定關聯關系(user1.user_id = user2.user_id)

user1.left_join(user2,['user_id'],['user_id'])

# 執行對象1左關聯對象2,指定對象1別名(u1),對象2別名(u2),并指定關聯關系(user1.user_id = user2.user_id)

user1.alias('u1').left_join(user2.alias('u2'),['user_id'],['user_id'])

# print(user1.exe_join())

# 打印對象1關聯后的全部查詢結果

print(user1.select())

"""

模型對象的復制與生成

"""

# 獲取新的模型操作對象

user1 = manager.user()

print('user1', '---', id(user1)) # 打印對象1的id

user2 = user1.copy_to_obj(manager.user) # 利用對象管理器實例中的模型模板進行對象獲取

print('user2', '---', id(user2)) # 打印對象2的id

print(user1('user_id'))

user3 = user1.read_from_dict({

'user_id': '111'

}) # 利用模型對象中的翻譯方法將字典生成一個新的模型對象

print('user3', '---', id(user3)) # 打印對象3的id

# 對比兩者id

print(user1('user_id'))

print(user3('user_id'))

參與貢獻

若有意向參與貢獻,請留言或發送郵件至ealohu@163.com

Fork 本項目

新建 Feat_xxx 分支

提交代碼

新建 Pull Request

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539967.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539967.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539967.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

clamp 函數

返回范圍內的一個數值。可以使用 clamp 函數將不斷增加、減小或隨機變化的數值限制在一系列的值中。 float clamp(float minnumber, float maxnumber, float parameter) 最小數值和最大數值指定返回值的范圍。 參數是值要鉗制在范圍內的屬性或變量。 如果參數位于最小數值和最大…

jquery $.each遍歷json數組方法

轉載地址&#xff1a;http://blog.sina.com.cn/s/blog_636f2d150101ezs1.html <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.o…

java 責任鏈模式 鏈表_責任鏈模式的實現及源碼中應用

01—責任鏈模式的實現假設一個出差任務的流程需要審批出差行程和出差報銷金額。那么&#xff0c;對應兩個部門的審核。我們先定義一個出差任務Task類&#xff1a;然后&#xff0c;我們定義一個抽象的處理類Handler&#xff0c;其中具體的處理方法Handle交給子類去實現。然后&am…

JQuery $.each遍歷JSON字符串報Uncaught TypeError:Cannot use 'in' operator to search for

查看一個簡單的jQuery的例子來遍歷一個JavaScript數組對象。 [js] view plaincopy var json [ {"id":"1","tagName":"apple"}, {"id":"2","tagName":"orange"}, {"id":&quo…

php setcookie 過期,php cookie怎么設置過期時間?

PHP中可以使用setcookie()函數設置cookie的過期時間。語法為“setcookie(name,value,expire,path,domain,secure)”&#xff1b;其中expire參數用于指定cookie的有效期&#xff0c;即過期時間戳。setcookie() 函數向客戶端發送一個 HTTP cookie。cookie 是由服務器發送到瀏覽器…

nginx自定義500、404錯誤頁面

1&#xff0c;首先在http添加以下內容 http{ fastcgi_intercept_errors on; } 2&#xff0c;server中添加以下內容&#xff1a; 注意路徑 error_page 500 502 503 504 /500.html; location /500.html { internal; } error_page 404 /404.html; location /404.html { intern…

php如何輸出復選框的值,php 怎么輸出復選框呢?

表單有6個復選框&#xff0c;如果選中的分別是第126個&#xff0c;數據庫存為 1&#xff0c;2&#xff0c;6現在的問題是 在修改的頁面 怎么用php從數據庫取值&#xff0c;輸出6個復選框&#xff0c;讓126為checked &#xff1f;回復討論(解決方案)$row[id]1;>我的意思是 從…

jQuery Mobile動態刷新頁面樣式

見 百度經驗 http://jingyan.baidu.com/article/7f766dafbc18f24101e1d014.html JQM里面當我們更新了某些頁面標簽(如: listview, radiobuttons, checkboxes, select menus)里的數據時,必須做refresh操作. 為什么必須做refresh操作操作呢?因為JQM在做頁面渲染的時候,為了使樣…

R-CNN論文翻譯

R-CNN論文翻譯Rich feature hierarchies for accurate object detection and semantic segmentation用于精確物體定位和語義分割的豐富特征層次結構2017-11-29摘要過去幾年&#xff0c;在權威數據集PASCAL上&#xff0c;物體檢測的效果已經達到一個穩定水平。效果最好的方法是融…

inflate簡介,LayoutInflater和inflate()方法的用法

一、inflate簡介 inflate這個方法總共有四種形式&#xff08;見下面&#xff09;&#xff0c;目的都是把xml表述的layout轉化為View對象。 其中有一個比較常用&#xff0c;View inflate(int resource, ViewGroup root)&#xff0c;另三個&#xff0c;其實目的和這個差不多。 …

php ci框架 實例化類,php框架CI(codeigniter)自動加載與自主創建對象操作實例分析...

本文實例講述了php框架CI(codeigniter)自動加載與自主創建對象操作。分享給大家供大家參考&#xff0c;具體如下&#xff1a;CI的autoload很好用&#xff0c;自動創建對象&#xff0c;但是注意&#xff0c;他的對象只有一個。我們很多情況下需要生成對象&#xff0c;這就很麻煩…

sass、gulp應用

Sass介紹n CSS 不是一個編程語言&#xff0c;可以用它來開發網頁樣式&#xff0c;但是沒有辦法用它進行編程。SASS 的出現&#xff0c;讓 CSS 實現了通過代碼編程來實現的方式。n SASS 是一種 CSS 開發工具&#xff0c;提供了許多便利的寫法&#xff0c;讓CSS 的處理實現了可編…

自定義控件SettingItemView

一、效果圖 選中&#xff1a;顯示自動更新開啟不選擇&#xff1a;顯示自動更新關閉------------在布局文件中的使用方式和android自生的控件一樣 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.andro…

php中如何存儲多個文本框,php-如何將每個字符的文本框拆分為多個子文本框

我正在設計一個PHP表單,其中包含一些輸入字段,如下圖所示.如何將輸入類型(文本框)拆分為單個字符子文本框,或將文本框拆分為給定字符串的每個字符的多列文本框.以及如何在其中插入數據| JOHN DOE |進入| J | O | H | N | | D | O | E |這樣解決方法:的HTML的CSS#text{backgroun…

為什么會有 AOP

為什么80%的碼農都做不了架構師&#xff1f;>>> AOP 面向切面的編程。 先上三張圖片 三處對數據庫進行操作&#xff0c; 但這三處有大量的重復的代碼&#xff0c;每次都是獲取session&#xff0c;獲取mapper&#xff0c;執行&#xff0c; commit&#xff0c;close…

PHP有表單和js交互亂碼問題,js 和 php交互問題

就是前端js發送數據給php處理&#xff0c;然后處理完之后接受php發送的返回結果&#xff0c;不用ajax&#xff0c;有其他的方法嗎&#xff1f;多謝&#xff01;iframe 公子 說的很明白了。Flashiframe內嵌個表單提交到PHP頁面并顯示結果&#xff0c;JS讀取iframe頁面內的內容即…

Android應用檢查更新下載安裝打開

一、效果 低版本1.02檢測到新版本1.03 調用android的安裝activity頁面 安裝完成 打開 1.03版本 二、注意 必須使用簽名的應用。因為android不管是虛擬機還是真機安裝應用都需要簽名。 在開發時&#xff0c;我們運行程序時&#xff0c;開發環境ADT會自動給我們加入一個默認的…

lnmp解析php,搭建LNMP,可以解析PHP文件-Go語言中文社區

一、安裝 nginx1. yum -y install pcre-devel zlib-devel links 下載相應軟件可以使用rpm -qa 軟件名 來查看是否安裝成功??2.useradd -u 250 -M -s /sbin/nologin nginx 建立程序用戶&#xff0c;降低權限3.tar xf nginx-1.6.0.tar.gz -C /usr/src/nginx 解壓并指定…

Linux vi 編輯器常見命令的使用

Linux vi 編輯器常見命令的使用 Linux下的文本編輯器有很多種&#xff0c;vi 是最常用的&#xff0c;也是各版本Linux的標配。注意&#xff0c;vi 僅僅是一個文本編輯器&#xff0c;可以給字符著色&#xff0c;可以自動補全&#xff0c;但是不像 Windows 下的 word 有排版功能。…

給控件添加小圖標

一、效果 二、知識點 三、代碼 <TextViewstyle"style/ContentStyle"android:drawableLeft"android:drawable/star_big_on"android:gravity"center"android:text"遠程鎖屏:#*lockscreen*#" />