数据库尽可能简单!

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_recordupdate_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

  • 初始提交

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java画布矩形位置   Java类文件未在Android Studio上编译或运行   Java“null”值从未分配给我的Runnable   java Jsp使用URL“保存或打开”访问pdf窗口在单击时显示错误   组件之间的Java swing通信   属性值的java正则表达式   java无法从myFile加载MainClass清单属性。震击器错误   Java内存碎片和大型阵列的分配   java是NullPointerException的一个问题   java如何使用鳄梨酱进行sftp的二次开发   新手程序员需要建议:“字符串索引超出范围”Java   基于页面的java Birt组头   使用集合时出错。使用ArrayList和类排序()。(爪哇)   在foursquare中使用多个单词进行带查询的java场馆搜索   有了新的Java14记录功能,是否可以为同一记录创建多个构造函数?   java创建自己的文件扩展名   java组织。阿帕奇。xml。安全性在Spring Boot下不工作   java谷歌地图标记标题安卓   java为什么选项卡小部件在安卓中位于内容之上?