SqlQueryBuilder
Wraps string building of MS SQL queries. It provides first level validation.
Current features
- Provides a string building facility for:
- Table
- Temporary Table
- Field
- Function on field
- String
- Using:
- Select
- Update
- From
- InnerJoin
- Where
- OrderBy
- Handling automatically:
- Table aliases
- Field aliases
Not implemented (yet)
- Insert
- Compound (sub-)queries
- Functions
- Proper Conditions
What it does not do
Connect to a database server and run the queries by itself.
It gives you the query as a string, it's then up to yopu to pass it to a SQL engine.
Example
- Define the elements of your query:
# Defines a Table for customers
customers_table = Table("Customers").add("id", "customerId", "mainPhone")
# Defines a Table for accounts
accounts_table = Table("Accounts", "acc").add("id", "customerId", "accountId")
# Selects the fields
select = Select(customers_table, accounts_table.fields.accountId)
# Sets an alias for an existing field
customers_table.fields.customerId.set_alias("cid")
# Specifies the table to takes as a FROM
from_ = From(customers_table)
# Specifies a temporary table for the select
atemptable = select.to_temptable("a_temp_table")
# Defines the InnerJoin
innerjoin = InnerJoin(accounts_table, accounts_table.fields.customerId, customers_table)
# Defines an Order By a defined field
orderby = OrderBy(customers_table.fields.customerId, descending=True)
# Adds a Where filter
where = Where(accounts_table.fields.accountId, "gt 20000 AND", customers_table.fields.customerId, "LIKE 'A1C%'")
- Inspect what those elements are made of:
# See what the object Select looks like
print(select)
# > Select(fields=[Field(name='id', alias='None', table='Customers'),
# ... Field(name='customerId', alias='cid', table='Customers'),
# ... Field(name='mainPhone', alias='None', table='Customers'),
# ... Field(name='accountId', alias='None', table='Accounts')])
# Initializes the QueryBuilder
query_builder = QueryBuilder(select, where, orderby, innerjoin, from_)
- Build your query:
# Builds the query
query_str: str = query_builder.build()
print(query_str)
# > SELECT Customers.id, Customers.customerId AS cid, Customers.mainPhone, acc.accountId
# > INTO #a_temp_table
# > FROM Customers
# > INNER JOIN Accounts acc on acc.customerId = Customers.customerId
# > WHERE acc.accountId gt 20000 AND Customers.customerId LIKE 'A1C%'
# > ORDER BY cid DESC
- Manipulate temporary tables which components are inferred:
# Is able to infer fields from temporary tables and use it as with a regular table.
temp_select = Select(atemptable)
print(temp_select)
# > Select(fields=[Field(name='id', alias='None', table='#a_temp_table'),
# ... Field(name='cid', alias='None', table='#a_temp_table'),
# ... Field(name='mainPhone', alias='None', table='#a_temp_table'),
# ... Field(name='accountId', alias='None', table='#a_temp_table')])
# Builds the query from the temporary table
print(QueryBuilder(
temp_select,
From(atemptable)
).build())
# > SELECT #a_temp_table.id, #a_temp_table.cid, #a_temp_table.mainPhone, #a_temp_table.accountId
# > FROM #a_temp_table
(Find it directly in the module example.py)
Compatible versions
Python 3.10 and above.
Dependencies
(None)
Changelog
0.1.0
This release changes the generated SQL: check your queries when upgrading.
- WHERE conditions and the right side of
INNER JOIN ... onuse the field's qualified name (t1.KeyId) instead of its SELECT alias, which SQL Server only accepts in ORDER BY. ORDER BY still uses the alias. UPDATE ... SETno longer writesAS aliasafter aliased fields (SET acc.a=1).- Temporary tables made with
Select.to_temptable()name their columns after the field aliases, asSELECT ... INTOdoes. - Adding the same field name twice in one call (
Table("t").add("a", "a")), including duplicate temporary-table columns, raisesAlreadyExistingFieldException. - An
Updatemixing two tables with the same name but different aliases raisesIncorrectUpdateException. NonExistingFieldExceptionis now anAttributeError:hasattr()andgetattr(..., default)work ontable.fields, and tables can be copied and pickled.- Requires Python 3.10 or later (was 3.7).
- The license metadata uses the SPDX expression
GPL-3.0-only.
Authors
Wael GRIBAA Contact: g.wael@outlook.fr Made in September 2024
Metadata
Release files for sql_querystring_builder 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sql_querystring_builder-0.1.0.tar.gz | 27.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sql_querystring_builder-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 48.5 kB
Release files / sql_querystring_builder-0.1.0.tar.gz
| Download URL | sql_querystring_builder-0.1.0.tar.gz |
|---|---|
| Size | 27.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
443a54d93b3a11ffdf9a92cf7d42b2fb79985251621df3b7e9e2946fc8ebe67d
|
|
BLAKE2b-256 checksum How to use checksums |
926d3d36a123e0637cd71166678e7914f0d2363a63958de26070ddc23254fd41
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / sql_querystring_builder-0.1.0-py3-none-any.whl
| Download URL | sql_querystring_builder-0.1.0-py3-none-any.whl |
|---|---|
| Size | 21.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a1e1da5b3af400707b59cb6d56ee188e3344976e62026624bab5a65d3cb4745c
|
|
BLAKE2b-256 checksum How to use checksums |
288e589737c72fa55fa89f4aa1414a74c2b9487d53de0d3aa6b6e7cff18fc4ef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|