SmartSQL - lightweight sql builder.
Project description
SmartSQL - lightweight Python sql builder, follows the KISS principle, less than 50 Kb.
You can use SmartSQL separatelly, or with Django, or with super-lightweight Ascetic ORM, or with super-lightweight datamapper Openorm (miror) etc.
LICENSE:
License is BSD
Short manual for sqlbuilder.smartsql
Quick start:
>>> from sqlbuilder.smartsql import Q, T, compile
>>> compile(Q().tables(
... (T.book & T.author).on(T.book.author_id == T.author.id)
... ).columns(
... T.book.name, T.author.first_name, T.author.last_name
... ).where(
... (T.author.first_name != 'Tom') & (T.author.last_name != 'Smith')
... )[20:30])
('SELECT "book"."name", "author"."first_name", "author"."last_name" FROM "book" INNER JOIN "author" ON ("book"."author_id" = "author"."id") WHERE "author"."first_name" <> %s AND "author"."last_name" <> %s LIMIT %s OFFSET %s', ['Tom', 'Smith', 10, 20])
table:
>>> T.book
<Table: "book", []>
>>> T.book__a
<TableAlias: "a", []>
>>> T.book.as_('a')
<TableAlias: "a", []>
field:
>>> T.book.name
<Field: "book"."name", []>
>>> T.book.name.as_('a')
<Alias: "a", []>
>>> F.book__name
<Field: "book"."name", []>
>>> F.book__name__a
<Alias: "a", []>
>>> F.book__name.as_('a')
<Alias: "a", []>
table operator:
>>> (T.book & T.author).on(T.book.author_id == T.author.id)
<TableJoin: "book" INNER JOIN "author" ON ("book"."author_id" = "author"."id"), []>
>>> (T.book + T.author).on(T.book.author_id == T.author.id)
<TableJoin: "book" LEFT OUTER JOIN "author" ON ("book"."author_id" = "author"."id"), []>
>>> (T.book - T.author).on(T.book.author_id == T.author.id)
<TableJoin: "book" RIGHT OUTER JOIN "author" ON ("book"."author_id" = "author"."id"), []>
>>> (T.book | T.author).on(T.book.author_id == T.author.id)
<TableJoin: "book" FULL OUTER JOIN "author" ON ("book"."author_id" = "author"."id"), []>
>>> (T.book * T.author).on(T.book.author_id == T.author.id)
<TableJoin: "book" CROSS JOIN "author" ON ("book"."author_id" = "author"."id"), []>
condition operator:
>>> (T.author.first_name != 'Tom') & (T.author.last_name.in_(('Smith', 'Johnson')))
<Condition: "author"."first_name" <> %s AND "author"."last_name" IN (%s, %s), ['Tom', 'Smith', 'Johnson']>
>>> (T.author.first_name != 'Tom') | (T.author.last_name.in_(('Smith', 'Johnson')))
<Condition: "author"."first_name" <> %s OR "author"."last_name" IN (%s, %s), ['Tom', 'Smith', 'Johnson']>
>>> T.author.last_name.startswith('Sm')
<Condition: "author"."last_name" LIKE %s || %s, ['Sm', u'%']>
>>> T.author.last_name.istartswith('Sm')
<Condition: "author"."last_name" ILIKE %s || %s, ['Sm', u'%']>
>>> T.author.last_name.contains('Sm')
<Condition: "author"."last_name" LIKE %s || %s || %s, [u'%', 'Sm', u'%']>
>>> T.author.last_name.icontains('Sm')
<Condition: "author"."last_name" ILIKE %s || %s || %s, [u'%', 'Sm', u'%']>
>>> T.author.last_name.endswith('Sm')
<Condition: "author"."last_name" LIKE %s || %s, [u'%', 'Sm']>
>>> T.author.last_name.iendswith('Sm')
<Condition: "author"."last_name" ILIKE %s || %s, [u'%', 'Sm']>
>>> T.author.age.between(20, 30)
<Between: "author"."age" BETWEEN %s AND %s, [20, 30]>
Django integration.
Simple add “sqlbuilder.django_sqlbuilder” to your INSTALLED_APPS.
>>> object_list = Book.s.q.tables( ... (Book.s & Author.s).on(Book.s.author == Author.s.pk) ... ).where( ... (Author.s.first_name != 'James') & (Author.s.last_name != 'Joyce') ... )[:10]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
sqlbuilder-0.7.9.8.tar.gz
(18.4 kB
view details)
File details
Details for the file sqlbuilder-0.7.9.8.tar.gz.
File metadata
- Download URL: sqlbuilder-0.7.9.8.tar.gz
- Upload date:
- Size: 18.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b073aa9341d4dce3793c9b7501272410cf530a958bbbb2db7c1d9302462d77b5
|
|
| MD5 |
0a1ecfdc608ca3e0cfe172d79d287c96
|
|
| BLAKE2b-256 |
3f2d9aa5e7f4183d13c5ab851a3acfa8364df6a19b9e8c321091a90a5738ca7b
|