Description
The conversions=
parameter works like this at the moment: https://sqlite-utils.datasette.io/en/3.23/python-api.html#converting-column-values-using-sql-functions
db["places"].insert(
{"name": "Wales", "geometry": wkt},
conversions={"geometry": "GeomFromText(?, 4326)"},
)
This proposal is to support values in that dictionary that are objects, not strings, which can represent more complex conversions - spun out from #399.
New proposed mechanism:
from sqlite_utils.utils import LongitudeLatitude
db["places"].insert(
{
"name": "London",
"point": (-0.118092, 51.509865)
},
conversions={"point": LongitudeLatitude},
)
Here LongitudeLatitude
is a magical value which does TWO things: it sets up the GeomFromText(?, 4326)
SQL function, and it handles converting the (51.509865, -0.118092)
tuple into a POINT({} {})
string.
This would involve a change to the conversions=
contract - where it usually expects a SQL string fragment, but it can also take an object which combines that SQL string fragment with a Python conversion function.
Best of all... this resolves the lat, lon
v.s. lon, lat
dilemma because you can use from sqlite_utils.utils import LongitudeLatitude
OR from sqlite_utils.utils import LatitudeLongitude
depending on which you prefer!
Originally posted by @simonw in #399 (comment)