为sqlite-utils提供快速外键添加
项目描述
sqlite-utils-fast-fks
为sqlite-utils提供快速外键添加。
背景
SQLite尚未提供向现有表添加外键约束的内置方法。
对此限制有两种解决方案
- 您可以创建一个新的表并添加新的外键,然后将数据复制过去,然后删除旧表并将新表重命名。此方法由sqlite-utils table.transform()方法实现。
- 您可以设置
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 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 8e3827ad1ab37f8d88b651729ba6661c6359eeabd03cdac547cdd4e8e7785e86 |
|
MD5 | 8dc9d145060cf57174ffa46179583bed |
|
BLAKE2b-256 | 2dd44e8fcc621d3373be387da948e57ff420e7a359aabdfbd547efbcdfd8d191 |
关闭
sqlite_utils_fast_fks-0.1-py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 130b0582a5d8b9b3a4ac7f8d72d1c4efc4c8b99388e22cfceccf3e1574f7d706 |
|
MD5 | 9ffd55190ebf851aa932afcc61cbef24 |
|
BLAKE2b-256 | 2b01a7ce32a7bc3540e6a9707a26426203ce79906f3e84db496f05e4f3d2430e |