python 数据库/sql 编程 - 从哪里开始

2024-01-16

使用嵌入式数据库的最佳方式是什么,比如 Python 中的 sqlite:

  1. 占地面积应该很小。我只需要每个表几千条记录。每个数据库只有少数表。
  2. 如果它是 Python 默认安装提供的,那就太好了。必须是开源的,可在 Windows 和 Linus 上使用。
  3. 如果不直接编写 SQL,但完全不需要 ORM,那就更好了。一些可以保护我免受实际数据库影响的东西,但不是那么大的图书馆。类似于 ADO 的东西会很棒。
  4. 大多数情况下会通过代码使用,但如果有一个 GUI 前端,那就太好了
  5. 只需几页即可开始。我不想一页一页地阅读表是什么以及 Select 语句如何工作。我知道这一切。
  6. 首选支持 Python 3,但 2.x 也可以。

该用途不是网络应用程序。这是一个小型数据库,最多可容纳 5 个表。每个表中的数据只是几个字符串列。想一些比腌制字典更大的东西

Update: 非常感谢您的宝贵建议。
我正在谈论的用例相当简单。您可能会在一两天内完成。
这是一个 100 行左右的 Python 脚本,它收集有关相对大量文件(例如 10k)的数据,并创建有关它们的元数据文件,然后创建有关整个文件树的一个大型元数据文件。我只需要避免重新处理已处理的文件,并为更新的文件创建元数据,并更新主元数据文件。在某种程度上,缓存已处理的数据,并且仅在文件更新时更新它。 如果缓存损坏/不可用,则只需处理整个树即可。可能需要 20 分钟,但没关系。

请注意,所有处理都是在内存中完成的。

我想避免任何外部依赖,这样脚本就可以轻松地放置在任何只需安装 Python 的系统上。作为 Windows,有时很难安装所有组件。 所以,在我看来,即使是数据库也可能是一种矫枉过正。

您可能不会启动 Office Word/Writer 来编写一个小的便利贴类型注释,同样,我也不愿意在这个用例中使用 Django 之类的东西。

从哪儿开始?


我强烈推荐使用好的 ORM。当您可以使用 Python 对象来管理数据库行时,生活会变得更加轻松。

我是 Django 中 ORM 的粉丝。但那已经被推荐了,你说那太重量级了。

这让我只能推荐一个 ORM:Autumn http://autumn-orm.org/。非常轻量级,与 SQLite 配合得很好。如果您的嵌入式应用程序是多线程的,那么您绝对需要 Autumn;它具有支持多线程 SQLite 的扩展。 (全面披露:我编写了这些扩展并贡献了它们。我在为 RealNetworks 工作时编写了它们,我的老板允许我捐赠它们,所以公开感谢 RealNetworks。)

Autumn 是用纯 Python 编写的。对于 SQLite,它使用 Python 官方 SQLite 模块来执行实际的 SQL 操作。秋天本身的记忆足迹很小。

我不推荐 APSW。以我的愚见,它并没有真正给你带来多大的帮助。它只是提供了一种执行 SQL 语句的方法,让您掌握 SQL 的工作方式。此外,它支持 SQLite 的每一个功能,甚至是那些你很少使用的功能,因此它实际上比 Autumn 拥有更大的内存占用,但使用起来却不那么容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 数据库/sql 编程 - 从哪里开始 的相关文章

随机推荐

  • 如何在wxpython框架中拖动图像

    在 wx 窗口中拖动图像 或文本 的最简单方法是什么 我需要一些步骤或一个小例子来说明如何做到这一点 提前感谢 看一下 wxPython 演示中的 PseudoDC 示例 该示例在窗口中显示一些随机形状 您可以抓取并移动它们 您应该能够应用
  • 如何在 Nightwatch 中运行单个测试

    我怎样才能只跑Test 3从以下测试中 module exports Test 1 function Test 2 function Test 3 function 一个新参数 测试用例已添加以运行指定的测试用例 nightwatch js
  • 具有记忆功能的斐波那契数在 Python 中运行缓慢?

    def fib n if n 1 return 0 if n 2 return 1 return fib n 2 fib n 1 def memo f cache def memoized n if n not in cache cache
  • Python中的递归(阶乘函数)

    我希望这不是一个太愚蠢的问题 但是为什么这段 Python 代码中的 return 1 语句会返回数字的阶乘 return True 也会发生这种情况 我理解它相当于 return 1 def factorial n if n 0 retu
  • VBA - 运行时错误 1004“应用程序定义或对象定义错误”

    我有一个 Excel 文档 它在第一次运行时将模板工作表复制到新工作表中 遵循此模板的任何其他工作表都会附加到新创建的工作表中 我在这部分代码的标题中收到错误 If Worksheets User Configuration Cells 9
  • 在外键中使用Django的bulk_create对象?

    我正在阅读 Djangobulk create 及其一些 缺陷 This has a number of caveats though 1 The model s save method will not be called and the
  • 如何保持页面上的对象随页面顶部滚动

    我在遵循 stackOverflow 问答时遇到问题 滚动时将对象固定到浏览器窗口顶部 https stackoverflow com questions 6980821 fix object to top of browser windo
  • CPU 因 attributeOfItemAtPath:error: 而引发

    我在用 NSFileManager attributesOfItemAtPath error 获取文件属性的函数 但有时我的应用程序 cpu 会达到 100 我正在使用此函数处理 100k 大约 个文件 我的申请样本 2128 NSFile
  • ORMLite Android 中的一对多关系

    如何在 ORMLite Android 中实现一对多关系 请找到示例 public class A private String name DatabaseField foreign true foreignAutoRefresh true
  • 将“page-break-before”应用于表行 (tr)

    根据 W3 org 的说法 这种风格page break after适用于块级元素 http www w3 org TR 2004 CR CSS21 20040225 page html page break props http www
  • 检测到 DisconnectedContext

    我需要帮助消除此错误 为此 RuntimeCallableWrapper 转换到 COM 上下文 0x465608 失败并出现以下错误 系统调用失败 例外情况来自 HRESULT 0x80010100 RPC E SYS CALL FAIL
  • ight_layout() 不考虑图副标题

    如果我向 matplotlib 图添加副标题 它就会被子图的标题覆盖 有人知道如何轻松解决这个问题吗 我尝试过tight layout 功能 但这只会让事情变得更糟 Example import numpy as np import mat
  • docker 卷类型之间的区别 - 绑定与卷

    TLDR In docker compose 有什么区别 volumes type volume source mydata target data and volumes type bind source mydata target da
  • Java锁概念内部是如何工作的?

    类的每个实例Object 及其子类 拥有一个在进入某个对象时获得的锁synchronized方法并在退出时自动释放 这是否意味着我们创建的任何对象实例在内部默认都有一个 锁 作为字段实现 我对这个 锁 概念感到困惑 我想知道它内部实际上做了
  • 两个列表之间的差异

    我有两个填充了 CustomsObjects 的通用列表 我需要在第三个列表中检索这两个列表之间的差异 第一个列表中的项目 第二个列表中的项目 我在想使用 Except 是个好主意 但我不知道如何使用它 帮助 Using Except这正是
  • 在该命名空间中的另一个函数内转发声明该命名空间中的函数

    我有两个源文件 a cpp and b cpp In a cpp 我有一个函数 foo namespace ns void foo std cout lt lt foo In b cpp 我在命名空间中有另一个函数ns我想在其中制作原型并调
  • 在 jar 启动时预加载 java 类/库?

    在对服务器的第一次 RPC 调用期间发生超时 但后续请求成功 服务器响应超时 因为第一次调用时它会加载处理请求所需的库 由于这种延迟 一些客户端会超时 尽管可以增加客户端的超时延迟 但我希望最大限度地减少类加载对应用程序响应能力的影响 您将
  • 用于在 Windows 7 上部署使用 Visual Studio 2015 开发的 C++ exe 的可再发行组件

    我使用 Visual Studio 2015 在 Windows 10 上 开发了一个 32 位 C 应用程序 我想将其部署到运行 Windows 7 及更高版本的计算机上 我组装了一个 WiX 安装程序 并包含了 VC 可再发行合并模块
  • 从 Qt4 移植后,带有 Win32 HWND 嵌入的 Qt5 QWidget::create() 不再工作

    以下代码尝试使用 create 方法将自定义创建的 OpenGL 窗口的本机 Win32 HWND 嵌入到 QWidget 中 viewer widget viewer widget QWidget parent const viewer
  • python 数据库/sql 编程 - 从哪里开始

    使用嵌入式数据库的最佳方式是什么 比如 Python 中的 sqlite 占地面积应该很小 我只需要每个表几千条记录 每个数据库只有少数表 如果它是 Python 默认安装提供的 那就太好了 必须是开源的 可在 Windows 和 Linu