Skip to main content

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)

Uploaded Source

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

Hashes for sqlbuilder-0.7.9.8.tar.gz
Algorithm Hash digest
SHA256 b073aa9341d4dce3793c9b7501272410cf530a958bbbb2db7c1d9302462d77b5
MD5 0a1ecfdc608ca3e0cfe172d79d287c96
BLAKE2b-256 3f2d9aa5e7f4183d13c5ab851a3acfa8364df6a19b9e8c321091a90a5738ca7b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page