跳转到主要内容

为sqlite-utils提供快速外键添加

项目描述

sqlite-utils-fast-fks

PyPI Changelog Tests License

sqlite-utils提供快速外键添加。

背景

SQLite尚未提供向现有表添加外键约束的内置方法。

对此限制有两种解决方案

  1. 您可以创建一个新的表并添加新的外键,然后将数据复制过去,然后删除旧表并将新表重命名。此方法由sqlite-utils table.transform()方法实现。
  2. 您可以设置PRAGMA writable_schema = 1,然后直接修改存储在sqlite_master表中的该表的架构。然后增加schema_version,再次设置writable_schema = 0并在数据库上运行vacuum。

对于具有大量行数的表,第二种方法要快得多,因为您不需要创建所有数据的完整新副本。

在版本3.35之前,sqlite-utils在其table.add_foreign_key()db.add_foreign_keys()方法中实现了后者模式。

结果发现,这些在某些Python安装上导致了table sqlite_master may not be modified错误,主要是在macOS上,其中默认情况下有时禁用了修改sqlite_master表的能力。

此插件将相同的函数再次带回。如果您想快速添加外键并且知道您的平台不会遇到table sqlite_master may not be modified错误,则可以使用此插件。

安装

在sqlite-utils相同的环境中安装此插件。

sqlite-utils install sqlite-utils-fast-fks

或使用pip安装

pip install sqlite-utils-fast-fks

Python库

要在Python代码中添加外键,请使用add_foreign_keys(db, foreign_keys)函数。以下是一个示例

from sqlite_utils_fast_fks import add_foreign_keys
from sqlite_utils import Database

db = Database("my_database.db")
db["country"].insert_all([{"id": 1, "name": "United Kingdom"}])
db["continent"].insert_all([{"id": 1, "name": "Europe"}])
db["places"].insert(
    {
        "id": 1,
        "name": "London",
        "country_id": 1,
        "continent_id": 1,
    }
)

# Now modify that places table to have two foreign keys:
add_foreign_keys(
    db,
    [
        ("places", "country_id", "country", "id"),
        ("places", "continent_id", "continent", "id"),
    ],
)

foreign_keys参数是一个元组列表,每个元组包含四个值

  • 要添加外键的表
  • 该表中将成为外键的列
  • 应参考的另一个表
  • 应参考的另一个表中的列

命令行工具

当作为sqlite-utils插件安装时,此库添加了一个新的sqlite-utils fast-fks命令。它可以这样使用

sqlite-utils fast-fks my_database.db places country_id country id

该命令接受数据库路径,然后是表名、列名、另一个表名和另一个列名。

您可以通过重复最后四个参数一次添加多个外键。

sqlite-utils fast-fks my_database.db \
    places country_id country id \
    places continent_id continent id

开发

要本地设置此插件,首先检出代码。然后创建一个新的虚拟环境

cd sqlite-utils-fast-fks
python3 -m venv venv
source venv/bin/activate

现在安装依赖项和测试依赖项

pip install -e '.[test]'

要运行测试

pytest

项目详情


下载文件

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

源分布

sqlite-utils-fast-fks-0.1.tar.gz (5.0 kB 查看散列)

上传时间:

构建分布

sqlite_utils_fast_fks-0.1-py3-none-any.whl (4.9 kB 查看散列)

上传时间: Python 3

由以下支持

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