注意,pypadb 0.1.14 版本破坏性变更。
命名更改:
pypadb.conf.db_configurer -> pypadb.conf.db (module)
pypadb.conf.table_configurer -> pypadb.conf.table (module)
pypadb.conf.db.DbConfigurer -> pypadb.conf.db.DbConfig (class)
pypadb.conf.table.TableConfig -> pypadb.conf.table.TableConfig (class)
pypadb.conf.db.db_configurer -> pypadb.conf.db.db_config (attribute)
pypadb.conf.table.tables -> pypadb.conf.table.table_pool (attribute)
安装
pypadb 依赖于 DBUtils、pydandic、PyMySQL,建议使用虚拟环境,避免污染全局依赖。
pip install pypadb
数据库连接配置
数据库连接用的是 pymysql,使用 DBUtils 作为连接池。
pypadb.conf.db_configurer 里有一堆 setter,是用来做数据库连接池配置的。
由于篇幅原因就不写方法具体内容了,返回的是 self,所以支持链式调用的写法。
方法 | 配置项 | 默认值 |
---|---|---|
set_creator | 配置连接数据库的模块 | pymysql |
set_maxconnections | 连接池允许的最大连接数,0 和 None 表示不限制连接数 | 6 |
set_mincached | 初始化时,链接池中至少创建的空闲的链接,0 表示不创建 | 2 |
set_maxcached | 链接池中最多闲置的链接,0和None不限制 | 5 |
set_blocking | 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错 | True |
set_maxusage | 一个链接最多被重复使用的次数,None表示无限制 | None |
set_setsession | 开始会话前执行的命令列表 | [] |
set_host | 数据库服务端主机名 | 127.0.0.1 |
set_port | 数据库服务端端口号 | 3306 |
set_user | 数据库登录用户 | root |
set_password | 数据库登录密码 | 123456 |
set_database | 数据库名 | test |
set_charset | 数据库连接使用的字符编码 | utf8 |
set_cursor | 数据库查询使用的指针类型 | pymysql.cursors.DictCursor |
使用 DictCursor 作为默认指针的原因是 DictCursor 会把每一行的查询结果作为 dict 返回 {'列名':'数据'}
,表结构改变时需要改动的代码少很多。
配置完后要调用 end
方法,初始化连接池。
完整的配置如下:
from pypadb.conf.db_configurer import db_configurer, DbConfigurer
db_configurer \
.set_host('localhost') \
.set_user('root') \
.set_password('123456') \
.set_database('test') \
.end()
# 或者自己 new 一个对象
DbConfigurer() \
.set_host('localhost') \
.set_user('root') \
.set_password('123456') \
.set_database('test') \
.end()
数据表配置(仅对象数据映射部分会用到)
from pydantic import BaseModel
from pypadb.conf.table_configurer import tables
class User(BaseModel):
id: int
account: str
stuffs: list = []
# 实体类必须继承 pydantic 的 BaseModel
class Stuff(BaseModel):
user_id: int
name: str
count: int
# 真正的配置部分 表名=类名
tables.init_tables(user=User, stuff=Stuff)
# 使用表格配置的内容
tables.user.select_one()
tables.stuff.select_many()
使用数据表就不需要另外写什么类或者模块,表和类的映射配好后直接把表作为 tables 的属性进行调用。
2022-01-26