A object-oriented way to manage SQL databases with Python’s library
Project description
前言
在Python中使用SQL查询语句是一件繁琐且不便于管理的事情,但又成为几乎目前存储数据的主流方式,我们试想是否能够使对数据库的各种操作能像原生对象的操作一样简单便捷,使开发者将精力更多地投入到产品功能的研发当中,所以本文将介绍一种全新的Python用使用MySQL数据库的方式:DBSO库
DBSO库介绍
DBSO (Database Select Object 数据库查询对象) 是一个以面向对象的方式管理MySQL数据库的Python第三方库,它能帮助你以调用对象的方式对数据库进行连接、查询、插入、删除、修改等操作,内置SQL常用关键字,删除对象时自动断开连接,以元素方式调用数据库、数据表和数据行,结构化地建立和查询数据表,使用它能极大简化Python中存储数据的开发流程,DBSO遵循以下原则:
- 将数据库的各个组成部分视作数据的存储容器
- SQL的并行逻辑拆解为多次实现
- 查询对象只对自己的自己的结构负责
- SQL的存储过程由Python的函数封装代替
- 在存储实现中,逻辑永远优先于语法
- 对数据描述的概念不继承SQL中的概念
LICENSE许可: 遵循 GPL version 3 开源协议
未来可能的版本更新:
- 支持其他如SQL Sever、Oracle、SQLite等数据库的兼容,实现跨数据库数据管理
- 逐步脱离依赖SQL独立为一个面向对象接口的非关系型数据库
- 扩充面向实际功能需要和数据计算的日期时间对象、条件判断对象和异常类
DBSO库安装
安装
pip install dbso
调用
import dbso
DBSO库构成
- Connect 用于建立和管理MySQL数据库连接
成员属性 | 属性含义 |
---|---|
state | 连接状态 |
databases | 连接下数据库名称 |
desc | 连接信息 |
version | 服务器版本信息 |
status | 服务器状态 |
variables | 服务器配置变量 |
成员方法 | 参数 | 方法作用 |
---|---|---|
__init__ | host: str, username: str, password: str, port: int, charset: str |
构造函数 |
disconnect | - | 断开连接 |
reconnect | - | 重新连接 |
create | name: str, charset: str, collate: str |
创建数据库 |
cmd | sql: str |
执行命令并提交 |
rollback | - | 回滚 |
- Database 用于管理数据库查询对象
成员属性 | 属性含义 |
---|---|
tables | 数据库下数据表名称 |
desc | 数据库结构 |
成员方法 | 参数 | 方法作用 |
---|---|---|
create | name: str, title: list, auto: int, engine: str, charset: str |
创建数据表 |
rename | name: str |
重命名数据库 (仅支持 MySQL 5.1.23及以前版本) |
- Table 用于管理数据表查询对象和数据
成员属性 | 属性含义 |
---|---|
length | 数据表长度 |
index | 数据表下索引名称 |
desc | 数据表结构 |
sql | 数据表创建语句 |
references | 数据表外键信息 |
成员方法 | 参数 | 方法作用 |
---|---|---|
append | *args |
添加数据行 |
clear | - | 清空表 |
add | col:Colum |
添加数据列 |
modify | col:Colum |
修改数据列 |
drop | col_name: str |
删除数据列 |
primary | col_name: str |
设置主键约束 |
foreign | constraint_name: str, col_name: str, foreign_table_name: str, foreign_col_name: str |
设置外键约束 |
drop_foreign | constraint_name: str |
删除外键约束 |
rename | name: str, new_name: str |
重命名数据表或字段 |
create_index | name: str, col_dict: dict, unique: bool |
创建索引 |
drop_index | name: str |
删除索引 |
- Colum 用于创建数据列对象
构造参数列表 | 参数含义 | 默认值 |
---|---|---|
name: str |
数据列名 | - |
col_type: str |
数据列类型 | "VARCHAR" |
length: int or str |
数据列长度 | 0 |
unsigned: bool |
是否无符号 | False |
auto: bool |
是否自动增长 | False |
primary: bool |
是否为主键 | False |
null: bool |
是否可空 | True |
unique: bool |
是否唯一 | False |
default: int or str |
默认值 | "" |
check: str |
检查约束 | "" |
foreign_table: str |
外键表名 | "" |
foreign_col: str |
外键数据列名 | "" |
constraint: str |
外键约束名 | "" |
addition: str |
附加SQL语句 | "" |
- Condition 用于创建数据列对象
构造参数列表 | 参数含义 | 默认值 |
---|---|---|
cols: list |
数据列列表 | None |
offset: int |
偏移量 | 0 |
step: int |
步数 | 0 |
asc: bool |
是否升序 | True |
null: bool |
NULL是否置顶 | False |
check: str |
约束 | "" |
order_col: str |
排序依赖列列名 | "" |
group_col: str |
分组依赖列列名 | "" |
having: str |
分组约束 | "" |
addition: str |
附加SQL语句 | "" |
快速开始使用 (示例代码)
import dbso # 导入dbso库
conn = dbso.connect('xxx.xxx.xxx.xxx', 'root', 'root_password') # 建立数据库连接
database_test = conn["test_db"] # 获取名为test_db的数据库对象
table_test = database_test["test_tb"] # 获取名为test_tb的数据表对象
table_test.append(1001, "数据1", "数据2", "2024-3-26", "true") # 向数据表中插入数据行1
table_test.append(1002, "数据3", "数据4", "2024-3-27", "false") # 向数据表中插入数据行2
result = table_test["id=1001"] # 在表中查询id为1001的数据
以上代码完成了一个将两条记录插入了test_db库下test_tb表中,并查询id=1001的数据行的简单功能
详细教程
数据库操作
1. 连接MySQL
conn = dbso.connect(服务器地址,账号,密码,[端口号],[字符集])
2. 创建数据库
db = conn.create(数据库名,[字符集名],[排序规则名])
3. 删除数据库
del conn[数据库名]
4. 重命名数据库
db.rename(新数据库名)
数据表操作
1. 创建数据列定义对象
数据列定义对象 (简称列定义对象) 指的是通过col函数返回的对象,数据列的概念在dbso库的使用中非常重要
from dbso import col # 导入数据列定义类
from dbso import word as wd # 导入SQL关键词包
创建普通列定义对象列表,多个列定义对象组成的列表在dbso中称为Header,用来定义一个数据表结构
header = [col(数据列名,wd.数据类型,[数据长度],[...]),
col(数据列名,wd.数据类型,[数据长度],[...]),
col(数据列名,wd.数据类型,[数据长度],[...]),
...]
创建外键约束定义对象,和普通列定义对象一样,也可以放入Header中
foreign_col = col(constraint=外键名,name=数据列名,foreign_table=外键数据表,foreign_col=外键数据列名)
2. 创建数据表
表中每个字段称为一个数据列
tb = db.create(表名,列定义对象列表,[自动增长初始值],[引擎名],[字符集名])
3. 添加数据列
tb.add(列定义对象)
4. 修改数据列
只需定义一个新的同名数据列对象作为参数即可更改原数据列
tb.modify(列定义对象)
5. 删除数据列
tb.drop(数据列名称)
6. 清空数据表
tb.clear()
7. 设置外键约束
tb.foreign(外键名,数据列名,外键数据表,外键数据列名)
8. 删除外键约束
tb.drop_foreign(外键名)
9. 创建表索引
{数据列1:"ASC"|"DESC",数据列2:"ASC"|"DESC",数据列3:"ASC"|"DESC"...} # 索引字典定义格式
table_test.create_index(索引名,索引字典,[是否唯一])
10. 删除表索引
table_test.drop_index(索引名)
11. 重命名数据表
table_test.rename(新数据表名)
数据操作
1. 创建约束对象
约束对象指的是cond函数返回的对象,约束对象是dbso查询中的一个重要概念
from dbso import cond # 导入约束类
cd = cond([数据列名称列表],[约束条件],[偏移量],[步数],[...])
2. 向表中添加数据
添加方式 1:快速插入数据
tb.append(数据1,数据2,数据3...)
添加方式 2:以值字典的方式插入数据
value_dict = {"列名1":数据1,"列名2":数据2,"列名3":数据3...}
tb.append(value_dict)
3. 查询表中数据
查询方式 1:用 * 符号查询表中全部数据
rows = tb["*"]
查询方式 2:用SQL约束语句查询表中数据
rows = tb[约束条件]
查询方式 3:以列名称列表作为参数查询表中选定列数据
rows = tb[(列名称1,列名称2,列名称3...)]
查询方式 4:用Condition约束对象查询表中数据
rows = tb[约束对象]
4. 更新表中数据
更新方式 1:用 * 符号更新表中全部数据
tb["*"] = {"列名1":数据1,"列名2":数据2,"列名3":数据3...}
更新方式 2:用SQL约束语句更新表中数据
tb[约束条件] = {"列名1":数据1,"列名2":数据2,"列名3":数据3...}
更新方式 3:用Condition约束对象更新表中数据
tb[约束对象] = {"列名1":数据1,"列名2":数据2,"列名3":数据3...}
5. 删除表中数据
删除方式 1:用 * 符号删除表中全部数据(不推荐,推荐使用清空函数)
del tb["*"]
删除方式 2:用SQL约束语句删除表中数据
del tb[约束条件]
删除方式 3:用Condition约束对象删除表中数据
del tb[约束对象]
以上仅仅是对dbso库常用操作的介绍,更多的操作请查看文章中库结构表
dbso库查询对象均支持内置的 len() 函数统计当前查询对象下的子查询对象数或数据行数
异常处理
在操作数据库时,可能会遇到各种异常,dbso提供了rollback函数
try:
...
except Exception as e:
...
conn.rollback()
finally:
...
conn.disconnect()
以上代码为异常处理示例
总结
本文介绍了如何用dbso库对MySQL数据库进行连接和管理等操作,介绍了dbso库的基本使用方法,通过dbso库我们可以轻松地在Python中使用MySQL库,无论是查询还是操作,dbso都为其提供了强大的面向对象方式功能支持。
由于本库处于初期版本阶段,可能存在一定Bug和缺陷,如果希望参与到改进该项目中,可以将反馈和建议发送至作者邮箱。
文章作者:Nine
作者邮箱:ninecodespace@gmail.com
GitHub项目地址:https://github.com/ninecoding/dbso
Python官方文档:https://docs.python.org/3/library/index.html
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.