# dophon-db
#### 项目介绍
dophon框架的数据库模块,也可单独作为一个与数据库模块交互的部件
支持mysql数据库连接
支持orm形式的数据操作
如有疑问请发送邮件联系作者:ealohu@163.com
#### 软件架构
模块架构分为以组件:
1. mysql连接组件(包括连接池,连接封装类,分页,结果输出过滤器,远程接收器,增量检测)
2. orm映射组件(包括映射基础结构定义,映射封装工具,映射操作定义)
3. 抽象工具集(包括结果集文件读取,解析,热更新,动态赋值等)
4. 多数据源(xml,orm)管理器,已内嵌到相应模块中
#### 安装教程
pip安装:
```commandline
pip install dophon-db [--user]
```
#### 使用说明
##### 0. 配置相关
```python
# 此处为数据库配置
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文件规范若干结果集组成
```xml
mysql.xml
<select id="findAll">
SELECT
*
FROM
table
</select>
```
> 通过代码关联xml文件,初始化结果集
```python
from dophon.mysql import *
_cursor=db_obj(mysql.xml,auto_fix=True)
# 根路径为配置文件路径
# 文件路径必须以/开头
```
> 通过代码获取xml文件其中某一个结果集(以id区分)
```python
result= _cursor.exe_sql(methodName='findAll')
```
> 支持动态参数传入(#{}形式)以及骨架参数传入(${形式})
动态参数传入:
```xml
<select id="findAllById">
SELECT
*
FROM
table
WHERE
id=#{id}
</select>
```
```python
result= _cursor.exe_sql(methodName='findAllById',args={'id':'12345678'})
```
骨架参数传入:
```xml
<select id="findAllByTableName">
SELECT
*
FROM
${table_name}
</select>
```
```python
result= _cursor.exe_sql(methodName='findAllByTableName',args={'table_name':'test_table'})
```
> 支持单条查询,列表查询,队列查询(结果集id与参数列表的列表形式和字典形式)
单条查询:
```xml
<select id="findAllById">
SELECT
*
FROM
table
WHERE
id=#{id}
</select>
```
```python
result= _cursor.exe_sql_single(methodName='findAllById',args={'id':'12345678'})
# result<dict>
```
列表查询:
```xml
<select id="findAllById">
SELECT
*
FROM
table
WHERE
id=#{id}
</select>
```
```python
result= _cursor.exe_sql(methodName='findAllById',args={'id':'12345678'})
# result<list>
```
队列查询:
1.列表形式:
```python
result= _cursor.exe_sql_queue(
method_queue=['test1','test2'],
args_queue=[
{'id':'123456','name':'tom'},
{}
]
)
# result<dict>
# {
# method_name:exec_result
# }
```
2.字典形式:
```python
result= _cursor.exe_sql_obj_queue(
queue_obj={
'test1':{
'id':'123456'
},
'test2':{}
}
)
# result<dict>
# {
# method_name:exec_result
# }
```
> 支持结果集文件热更新
```python
update_round(_cursor,1)
# update_round(<cursor>,second:int)
```
> 支持远程维护结果集文件
```python
# 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. 表模型映射方式
暂时支持单条事务操作
> 通过初始化模型管理器获取数据库表映射骨架
```python
from dophon import orm
manager = orm.init_orm_manager(['user'])
```
> 通过实例化映射骨架获取表操作缓存实例(操作实例)
```python
user = manager.user()
```
> 通过对操作实例赋值进行对对应表模拟操作
```python
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())
```
> 通过对操作实例结构化操作对数据库对应表结构进行数据落地操作
```python
# 打印对象操作语句(内部方法)
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别�
没有合适的资源?快使用搜索试试~ 我知道了~
dophon框架的数据库模块,支持mysql,sqlite数据库,带有orm持久化功能与链式操作实例,贴近逻辑习惯,支持mysq
共48个文件
py:40个
xml:2个
txt:1个
0 下载量 62 浏览量
2024-11-18
10:33:47
上传
评论
收藏 59KB ZIP 举报
温馨提示
dophon框架的数据库模块,支持mysql,sqlite数据库,带有orm持久化功能与链式操作实例,贴近逻辑习惯,支持mysq
资源推荐
资源详情
资源评论
收起资源包目录
dophon-db.zip (48个子文件)
dophon-db
新建文本文档.txt 0B
LICENSE 11KB
dophon_db
__init__.py 156B
mysql
__init__.py 64B
Connection.py 3KB
Pool.py 6KB
orm
__init__.py 477B
db_obj
__init__.py 11KB
function_class
__init__.py 12KB
type_dict.py 6KB
query_structor.py 10KB
manager_init.py 3KB
sql_util
__init__.py 3KB
xml
__init__.py 2KB
core.py 23KB
cluster.py 2KB
binlog
__init__.py 1KB
ZipBinLog.py 976B
Schued.py 861B
remote
__init__.py 376B
Cell.py 4KB
PageHelper.py 2KB
single.py 5KB
utils
__init__.py 3KB
dynamic_import.py 2KB
sqllite
__init__.py 249B
db_init.py 3KB
const
__init__.py 60B
regix_str.py 193B
mongo
__init__.py 95B
Pool.py 3KB
reader
__init__.py 9KB
pyproject.toml 428B
test
__init__.py 149B
application.py 1KB
test_orm.py 9KB
test_mysql_transaction.py 789B
test_mysql.py 492B
test.db 12KB
applications.py 1KB
test_mysql_cluster.py 498B
test_mongo_db.py 470B
test_sqllite.py 219B
test_mysql_call_chain.py 792B
test.sql 3KB
mappers
test
mysql.xml 239B
transaction.xml 682B
README.md 9KB
共 48 条
- 1
资源评论
0仰望星空007
- 粉丝: 4117
- 资源: 568
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功