Releases: piccolo-orm/piccolo
1.14.0
Laying the foundations for alterative Postgres database drivers (e.g.psqlpy
). Thanks to @insani7y and @chandr-andr for their help with this.
Warning
The SQL generated by Piccolo changed slightly in this release. Aliases used to be like "manager$name"
but now they are like "manager.name"
(note $
changed to .
). If you are using SelectRaw
in your queries to refer to these columns, then they will need updating. Please let us know if you encounter any other issues.
1.13.1
In Piccolo 1.6.0
we moved some aggregate functions to a new file. We now re-export them from their original location to keep backwards compatibility. Thanks to @sarvesh-deserve for reporting this issue.
1.13.0
Improved LazyTableReference
, to help prevent circular import errors.
1.12.0
1.11.0
Added datetime functions, for example Year
:
>>> from piccolo.query.functions import Year
>>> await Concert.select(Year(Concert.starts, alias="starts_year"))
[{'starts_year': 2024}]
Added the Concat
function, for concatenating strings:
>>> from piccolo.query.functions import Concat
>>> await Band.select(
... Concat(
... Band.name,
... '-',
... Band.manager._.name,
... alias="name_and_manager"
... )
... )
[{"name_and_manager": "Pythonistas-Guido"}]
1.10.0
Added not_any
method for Array
columns. This will return rows where an array doesn't contain the given value. For example:
class MyTable(Table):
array_column = Array(Integer())
>>> await MyTable.select(
... MyTable.array_column
... ).where(
... MyTable.array_column.not_any(1)
... )
[{"array_column": [4, 5, 6]}]
Also fixed a bunch of Pylance linter warnings across the codebase.
1.9.0
Added some math functions, for example Abs
, Ceil
, Floor
and Round
.
>>> from piccolo.query.functions import Round
>>> await Ticket.select(Round(Ticket.price, alias="price"))
[{'price': 50.0}]
Added more operators to QueryString
(multiply, divide, modulus, power), so we can do things like:
>>> await Ticket.select(Round(Ticket.price) * 2)
[{'price': 100.0}]
Fixed some edge cases around defaults for Array
columns.
def get_default():
# This used to fail:
return [datetime.time(hour=8, minute=0)]
class MyTable(Table):
times = Array(Time(), default=get_default)
Fixed some deprecation warnings, and improved CockroachDB array tests.
1.8.0
Added the Cast
function, for performing type conversion.
Here's an example, where we convert a timestamp
to time
:
>>> from piccolo.columns import Time
>>> from piccolo.query.functions import Cast
>>> await Concert.select(Cast(Concert.starts, Time()))
[{'starts': datetime.time(19, 0)}]
A new section was also added to the docs describing functions in more detail.
1.7.0
Arrays of Date
/ Time
/ Timestamp
/ Timestamptz
now work in SQLite.
For example:
class MyTable(Table):
times = Array(Time())
dates = Array(Date())
timestamps = Array(Timestamp())
timestamps_tz = Array(Timestamptz())
1.6.0
Added support for a bunch of Postgres functions, like Upper
, Lower
, Length
, and Ltrim
. They can be used in select
queries:
from piccolo.query.functions.string import Upper
>>> await Band.select(Upper(Band.name, alias="name"))
[{"name": "PYTHONISTAS"}]
And also in where
clauses:
>>> await Band.select().where(Upper(Band.manager.name) == 'GUIDO')
[{"name": "Pythonistas"}]