Skip to main content

relations-sqlite

Module for interacting with Relations and SQLite. It generates SQLite compatible SQL from SQL like classes in Python.

This is the SQL library used by relations-sqlite3, but folks may find it useful. So here's some of the main unittests so you get the general idea.

import

All the classes are capitalized to prevent collisions with reserved keywords. Plus it looks like actual SQL. So you can do a full import without worries.

from relations_sqlite import *

select

query = SELECT("*").OPTIONS("FAST").FROM("people").WHERE(stuff__gt="things")

query.generate()
self.assertEqual(query.sql, """SELECT FAST * FROM `people` WHERE `stuff`>?""")
self.assertEqual(query.args, ["things"])

query = SELECT(
    "*"
).OPTIONS(
    "FAST"
).FROM(
    people=SELECT(
        "a.b.c"
    ).FROM(
        "d.e"
    )
).WHERE(
    stuff__in=SELECT(
        "f"
    ).FROM(
        "g"
    ).WHERE(
        things__a__0___1____2_____3__gt=5
    )
)

query.generate()
self.assertEqual(query.sql,
    "SELECT FAST * FROM (SELECT `a`.`b`.`c` FROM `d`.`e`) "
    "AS `people` WHERE `stuff` IN "
    "(SELECT `f` FROM `g` WHERE json_extract(`things`,?)>?)"
)
self.assertEqual(query.args, ['$.a[0][-1]."2"."-3"', 5])

query.GROUP_BY("fee", "fie").HAVING(foe="fum").ORDER_BY("yin", yang=DESC).LIMIT(1, 2)

query.generate()
self.assertEqual(query.sql,
    "SELECT FAST * FROM (SELECT `a`.`b`.`c` FROM `d`.`e`) "
    "AS `people` WHERE `stuff` IN "
    "(SELECT `f` FROM `g` WHERE json_extract(`things`,?)>?) "
    "GROUP BY `fee`,`fie` HAVING `foe`=? "
    "ORDER BY `yin`,`yang` DESC LIMIT ? OFFSET ?"
)
self.assertEqual(query.args, ['$.a[0][-1]."2"."-3"', 5, 'fum', 1, 2])

insert

query = INSERT("people").VALUES(stuff=1, things=2).VALUES(3, 4)

query.generate()
self.assertEqual(query.sql,"INSERT INTO `people` (`stuff`,`things`) VALUES (?,?),(?,?)")
self.assertEqual(query.args, [1, 2, 3, 4])

query = INSERT("people").OPTIONS("FAST")
query.SELECT("stuff").FROM("things")

query.generate()
self.assertEqual(query.sql,"INSERT FAST INTO `people` SELECT `stuff` FROM `things`")
self.assertEqual(query.args, [])

query = INSERT("people").VALUES(stuff=1, things=2).VALUES(3, 4)
query.SELECT("stuff").FROM("things")

self.assertRaisesRegex(relations_sql.SQLError, "set VALUES or SELECT but not both", query.generate)

update

query = UPDATE("people").SET(stuff="things").WHERE(things="stuff")
query.OPTIONS("FAST").ORDER_BY("yin", yang=DESC).LIMIT(5)

query.generate()
self.assertEqual(query.sql, """UPDATE FAST `people` SET `stuff`=? WHERE `things`=? ORDER BY `yin`,`yang` DESC LIMIT ?""")
self.assertEqual(query.args, ["things", "stuff", 5])

query.LIMIT(10)

self.assertRaisesRegex(relations_sql.SQLError, "LIMIT can only be total", query.generate)

delete

query = DELETE("people").WHERE(things="stuff")
query.OPTIONS("FAST").ORDER_BY("yin", yang=DESC).LIMIT(5)

query.generate()
self.assertEqual(query.sql, """DELETE FAST FROM `people` WHERE `things`=? ORDER BY `yin`,`yang` DESC LIMIT ?""")
self.assertEqual(query.args, ["stuff", 5])

query.LIMIT(10)

self.assertRaisesRegex(relations_sql.SQLError, "LIMIT can only be total", query.generate)

Release files for relations-sqlite 0.6.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for relations-sqlite 0.6.3
File Size Uploaded
relations_sqlite-0.6.3.tar.gz 8.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for relations-sqlite 0.6.3
File Interpreter ABI Platform
relations_sqlite-0.6.3-py3-none-any.whl Python 3 none any Details

Total release size: 19.2 kB

Release files / relations_sqlite-0.6.3.tar.gz

Download URL relations_sqlite-0.6.3.tar.gz
Size 8.7 kB
Tags Source
SHA-256 checksum
How to use checksums
d0056eb6136928ede28e5b98c30f15801f6c3e4dc51acc0338e6233e503688c1
BLAKE2b-256 checksum
How to use checksums
4e7a42c221a251b3b874ed249445f89af0e33edb2c608c1e4474a41f865677ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.5

Release files / relations_sqlite-0.6.3-py3-none-any.whl

Download URL relations_sqlite-0.6.3-py3-none-any.whl
Size 10.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dd1f471e1b83ccf095ddaa583458bb879cfc32d382675195e20e8d52f2fd4e99
BLAKE2b-256 checksum
How to use checksums
7a905e7e5cbaf0dccb6fa2e8dc2f92e2684a89c60563ce13cc539f6260168c8d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.5

Release history Release notifications | RSS feed

This release

0.6.3 This release

2 release files

0.6.2

2 release files

0.6.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page