数据库尽可能简单!
MrDatabase的Python项目详细描述
mrdatabase版本0.9.8
数据库尽可能简单!
简单的代码示例
安装
pip安装mrdatabase
创建数据库
创建mrdatabase实例时,它将检查路径是否指向现有的sqlite.db文件。如果没有,它将创建它。
frommr_databaseimportMrDatabasedb=MrDatabase('some/path/my.db')
大多数与数据库的连接和断开操作由mrdatabase的内部处理。
表格(DDL)
创建一个新的表类是非常容易的。这个类同时作为模式和记录工厂工作。只需创建一个继承自表的类。添加字段作为类变量。每个字段都必须是
列
的实例。喂,桌子准备好了!
frommr_databaseimportColumnfrommr_databaseimportTablefrommr_databaseimportDataTypesclassCity(Table):id=Column(DataTypes.integer,pk=True)postalCode=Column(DataTypes.smallint,default=9999)cityName=Column(DataTypes.varchar(40),default='New York')
有了一个表类,在数据库中创建或删除一个表就很容易了,如下所示!
db.create_table(City)db.drop_table(City)
类型提示
如果您希望在记录维护中使用python 3样式的类型提示,那么在定义表类时必须更加详细一些。
您必须创建一个\uu init\u
方法,初始化超级类并添加每个属性,使用type hint并从类级别的列中设置默认值。听起来可能很复杂,但如果你往下看,这是完全可行的。打字提示非常有用。尤其是当你使用像pycharm这样的编辑器时。
classCity(Table):id=Column(DataTypes.integer,pk=True)postalCode=Column(DataTypes.smallint,default=9999)cityName=Column(DataTypes.varchar(40),default='New York')def__init__(self):super().__init__()self.id:int=City.id.defaultself.postalCode:int=City.postalCode.defaultself.cityName:str=City.cityName.default
记录(DML)
要在数据库中插入、更新或删除记录,需要记录对象表示要操作的内容。
如果在表上设置了整数主键,则在插入记录时,pimary key属性将自动递增。插入时,记录对象的ID将用指定的ID更新。
您可以创建新的记录对象,如city1
示例,在这里您可以创建表类的实例,也可以使用db从数据库中获取现有的记录。选择"记录"或
db。选择"记录"。最后,可以对要复制的记录调用
.clone()
。如果有问题的记录,此方法将返回一个copy.deepcopy
。
city1=City()city1.postal_code=10115city1.city_name='Berlin'cities=db.select_records(City)# all citiescities=db.select_records(City,condition='postalCode > 4000')# all cities with a postal code > 4000a_city=db.select_record(City,condition='cityName="Berlin"')# just Berlincity2=city1.clone()# clone (copy.deepcopy)db.insert_record(city1)db.update_record(city1)db.delete_record(city1)
配料
默认情况下,对insert_record
和update_record
等操作进行变异,一次将更改提交给数据库一个操作。这很容易使用,但对于繁重的工作负载,这可能会对性能造成很大的负担。如果需要执行许多变异操作,可以将操作批处理在一起,以显著提高性能。
要设置它,可以使用数据库连接
上下文管理器。将
db
对象传递给它,并设置con_type=contype.batch
。在database connection
中调用的所有数据库操作都将使用由databaseconnection
管理的数据库连接
frommr_databaseimportDatabaseConnectionfrommr_databaseimportConTypewithDatabaseConnection(db,con_type=ConType.batch):forclone_numberinrange(10000):new_person=person_1.clone()new_person.firstName+=f'_{clone_number}'db.insert_record(new_person)
上面的示例插入了一个person()
记录的10000个克隆。2017年标准笔记本电脑的使用时间不到500毫秒。
发行说明
0.9.8版
- 将项目名称从mr_数据库重命名为mr database
0.9.7版
- 将项目名称从mr database重命名为mr_数据库
版本0.9.6 alpha
- 为大多数功能添加了pytest代码
- 已添加mrdatabase.table_exists
- 重命名get_referenced_record以获取连接记录
- 重命名"全部获取引用的记录"以选择"全部加入记录"
- 将演示代码移到/samples/module中
- 已更新.gitignore以反映更改
- 更新的文档(批处理)
- run_tests.bat现在假定python.exe在路径上
- 准备PYPI包(setup.py、清理项目等)
版本0.9.5 alpha
- 添加了如何对SQL命令进行批处理的代码示例(在不到半秒的时间内处理10K行)
- 添加了有关如何对sql命令进行批处理的文档
- 已将.clone()添加到recorD对象(基于copy.deepcopy)
- 尝试生成脚本,但性能太差
- 重构数据库连接(现在是数据库连接),以便更好地区分变异、查询和批处理。
- 添加了contype枚举类(变异、查询、批处理)
- 表类的清理、简化和优化
- mrdatabase类的清理、简化和优化
- 为整数主键添加了自动递增功能
- 更改了pyside示例以使用新的数据库连接
- 在文档中添加了记录实例类型提示示例
版本0.9.4 alpha
- 向readme.md添加了代码示例
- 重命名为mrdatabase.get_next_id到mrdatabase.increment_id
- 将
mrdatabase()
更改为将路径而不是路径和数据库名称作为单独的参数 - 为导入创建统一的命名空间
版本0.9.3 alpha
- 属性名不再需要作为参数传入
版本0.9.2 alpha
- 修正了demo blob.py
版本0.9.1 alpha
- 简化表定义
- 已将所有查询生成转换为使用f字符串
版本0.9.0 alpha
- 初始提交