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.mzph.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*#" />