跳转到主要内容

一个将数据类绑定到sqlite3数据库的小型包

项目描述

datalite3

PyPI version shields.io PyPI license Documentation Status

需要注意的是,Datalite不适用于安全Web应用程序,它仅适用于可以信任用户输入的情况。

Datalite是一个简单的Python包,可以将您的数据类绑定到sqlite3数据库中的表,使用它非常简单,假设您有一个数据类定义,只需将装饰器@datalite("mydb.db")添加到定义的顶部,数据类现在将绑定到文件mydb.db

详细API参考

下载和安装

您可以通过以下方式安装datalite3

pip install datalite3

或者您可以克隆存储库并运行

python setup.py

Datalite没有依赖项!因为它建立在Python 3.6+标准库之上。尽管如此,其测试需要unittest库。

Datalite应用实例

from dataclasses import dataclass
from datalite3 import datalite


@datalite(db="mydb.db")
@dataclass
class Student:
    student_id: int
    student_name: str = "John Smith"

此代码片段将在sqlite3数据库文件mydb.db中生成一个名为student的表,具有列student_idstudent_name,分别具有SQL类型INTEGERTEXTstudent_name的默认值为John Smith。将自动添加第三个列__id__来存储记录的主键。

##基本用法

条目操作

在传统地创建对象后,鉴于您使用了datalite装饰器,对象有三个新方法:.create_entry().update_entry().remove_entry(),您可以使用前者将对象添加到其相关表,并使用后者将其删除。您还可以使用中间方法更新记录。

student = Student(10, "Albert Einstein")
student.create_entry()  # Adds the entry to the table associated in db.db.
student.student_id = 20 # Update an object on memory.
student.update_entry()  # Update the corresponding record in the database.
student.remove_entry()  # Removes from the table.

自定义主键

如果我们想将一个或多个字段声明为记录主键的一部分,我们只需用Primary[type]来注释它们,其中type可以是intfloatstrbytes之一。

from dataclasses import dataclass
from datalite3 import datalite, Primary


@datalite(db="mydb.db")
@dataclass
class Student:
    student_id: Primary[int]
    student_name: str = "John Smith"

此代码段将在sqlite3数据库文件mydb.db中生成一个名为student的表,包含列student_idstudent_name,分别对应SQL类型INTEGERTEXT。列student_id还将作为主键,不会添加__id__列。

获取记录

:warning: 限制!fetch只能正确获取有限类别的数据:int、float、bytes和str!

最后,您可能希望从已存在的表中重新创建对象,为此我们提供了fetch模块,您可以从中导入fetch_from(class_, key)以及is_fetchable(className, key),前者根据其唯一键从SQL数据库中获取记录,而后者检查是否可获取(很可能是检查是否存在)。

>>> fetch_from(Student, 20)
Student(student_id=20, student_name='Albert Einstein')

我们还有三个辅助方法

  • fetch_all(class_):获取给定类的所有记录。返回一个class_对象的元组;
  • fetch_if(class_, condition):获取满足给定条件的类型为class_的所有记录。这里条件必须用SQL语法编写;
  • fetch_equals(class_, field, value):获取类型为class_且列field设置为value的所有记录;

分页

datalite还支持在fetch_iffetch_allfetch_where中进行分页,您可以为每一页指定page(页码)和element_count(每页元素数量,默认10),以便获取记录的子集。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

datalite3-1.0.1.tar.gz (16.5 kB 查看哈希值)

上传时间 源代码

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面