id,node_id,number,state,locked,title,user,body,created_at,updated_at,closed_at,merged_at,merge_commit_sha,assignee,milestone,draft,head,base,author_association,repo,url,merged_by,auto_merge
757797315,PR_kwDOCGYnMM4tKxHD,330,closed,0,Test against Python 3.10,9599,,2021-10-13T21:50:22Z,2021-11-15T02:59:29Z,2021-10-13T22:25:05Z,2021-10-13T22:25:05Z,fda4dad23a0494890267fbe8baf179e2b56ee914,,,0,fc3de90963b6b097826d36f6a24c46267659dcf2,718a8f61bcaed39c04d5d223104056213f8c8516,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/330,,
510956134,MDExOlB1bGxSZXF1ZXN0NTEwOTU2MTM0,190,closed,0,Progress bar for sqlite-utils insert command,9599,Refs #173,2020-10-27T18:08:53Z,2020-10-27T18:16:03Z,2020-10-27T18:16:03Z,2020-10-27T18:16:03Z,f99a23652910b03ac4669bbbb35a9b484451aabb,,,0,62d678122a251812cd650845705ca7b9efcef86d,c7e5dd64513c0ec2b2df4c51c8df924c282417f9,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/190,,
1029360106,PR_kwDOCGYnMM49Wsnq,465,closed,0,beanbag-docutils>=2.0,9599,Refs #464,2022-08-17T22:41:39Z,2022-08-17T23:38:07Z,2022-08-17T23:38:02Z,2022-08-17T23:38:02Z,f8ffac8787e299a62c99ed1ce914cd5ace84ad94,,,0,bb90d3326815a041512b40bf0cf53b3ace06cd67,45e24deffea042b5db7ab84cd1eb63b3ed9bb9da,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/465,,
490703173,MDExOlB1bGxSZXF1ZXN0NDkwNzAzMTcz,166,closed,0,Keyword only arguments for transform(),9599,Refs #165,2020-09-22T05:41:44Z,2020-09-22T06:39:11Z,2020-09-22T06:39:11Z,2020-09-22T06:39:10Z,f8e10df00eae209fb0a1ea03384d9153f673a3ec,,,0,f8648cac3a6dda90578a1536cdae44d145633a2c,987dd123f2ac43c5ab66d69e59d454fe09660606,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/166,,
445833908,MDExOlB1bGxSZXF1ZXN0NDQ1ODMzOTA4,120,closed,0,Fix query command's support for DML,79913,See commit messages for details. I ran into this while investigating another feature/issue.,2020-07-08T01:36:34Z,2020-07-08T05:14:04Z,2020-07-08T05:14:04Z,2020-07-08T05:14:04Z,f8277d0fb9c05a88a9ff01d996e31d55f0f0a645,,,0,6a660d12a27864d6ab552e11eef9fd13bc281198,d0cdaaaf00249230e847be3a3b393ee2689fbfe4,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/120,,
791153878,PR_kwDOCGYnMM4vKAzW,347,open,0,Test against pysqlite3 running SQLite 3.37,9599,Refs #346 and #344.,2021-11-29T23:17:57Z,2021-12-11T01:02:19Z,,,f70a61e58ae62e53af74ab48d742bdc335131fbd,,,0,1a7ef2fe2064ace01d5535fb771f941296fb642a,213a0ff177f23a35f3b235386366ff132eb879f1,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/347,,
1406821147,PR_kwDOCGYnMM5T2mMb,560,closed,0,Use sqlean if available in environment,9599,"Refs:
- #559
----
:books: Documentation preview :books:: https://sqlite-utils--560.org.readthedocs.build/en/560/
",2023-06-25T19:48:48Z,2023-06-26T08:21:00Z,2023-06-25T23:25:51Z,2023-06-25T23:25:51Z,f5c63088e1454811ce8361208b72297408eb5237,,,0,5e7d27e5df024ce1f45e3a850c4e0f65e765cccd,2747257a3334d55e890b40ec58fada57ae8cfbfd,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/560,,
573147168,MDExOlB1bGxSZXF1ZXN0NTczMTQ3MTY4,233,closed,0,"Run tests against Ubuntu, macOS and Windows",9599,Refs #232,2021-02-14T20:11:02Z,2021-02-14T20:39:54Z,2021-02-14T20:39:54Z,2021-02-14T20:39:54Z,f51a1f6c3cb2929bcf79cb4efe3b2a9886d9c25c,,,0,deb01a8913441e7fedb53c52a3a9fdff274ddbd2,320f3ac33a83b32f89559ef0c162b7eca428a278,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/233,,
1015320511,PR_kwDOCGYnMM48hI-_,460,closed,0,Cross-link CLI to Python docs,9599,"Work in progress, partly to test the ReadTheDocs preview link action.
Refs:
- #426
----
:books: Documentation preview :books:: https://readthedocs-preview--460.org.readthedocs.build/en/460/
",2022-08-02T16:18:28Z,2022-08-18T21:58:10Z,2022-08-18T21:58:07Z,2022-08-18T21:58:07Z,f4fb78fa95057fbc86c734020835a3155695297f,,,0,f21f4ccf7197e7a0ac8c2eb5086659fc3eb5bc05,1856002e3c0fcc9f09f72ab7d97ad8c75f6de7df,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/460,,
510235909,MDExOlB1bGxSZXF1ZXN0NTEwMjM1OTA5,189,closed,0,Allow iterables other than Lists in m2m records,35681,"I was playing around with sqlite-utils, creating a Roam Research dogsheep-style importer for Datasette, and ran into a slight snag.
I wanted to use a generator to add an order column in an importer. It looked something like:
```
def order_generator(iterable, attr=None):
if attr is None:
attr = ""order""
order: int = 0
for i in iterable:
i[attr] = order
order += 1
yield i
```
When I used this with `insert_all` and other things, it worked fine--but it didn't work as the `records` argument to `m2m`. I dug into it, and sqlite-utils is explicitly checking if the records argument is a list or a tuple. I flipped the check upside down, and now it checks if the argument is a mapping. If it's a mapping, it wraps it in a list, otherwise it leaves it alone.
(I get that it might not really make sense to put the order column on the second table. I changed my import schema a bit, and no longer have a real example, but maybe this change still makes sense.)
The automated tests still pass, but I did not add any new ones.
Let me know what you think! I'm really loving Datasette and its ecosystem; thanks for everything!",2020-10-26T18:47:44Z,2020-10-27T16:28:37Z,2020-10-27T16:24:21Z,2020-10-27T16:24:21Z,f045d8559a6d2cb922a2de30fbcc896a4486b82f,,,0,93230b2acb61635b6d5070ad9c65e7221c63b75a,e4f1c7b936981de29823730c5dbef4f4ba7a4286,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/189,,
737050557,PR_kwDOCGYnMM4r7n-9,327,closed,0,Extract expand: Support JSON Arrays,101753,"Hi,
I needed to extract data in JSON Arrays to normalize data imports. I've quickly hacked the following together based on #241 which refers to #239 where you, @simonw, wrote:
> Could this handle lists of objects too? That would be pretty amazing - if the column has a [{...}, {...}] list in it could turn that into a many-to-many.
They way this works in my work is that many-to-many relationships are created for anything that maps to an dictionary in a list, and many-to-one relations for everything else (assumed to be scalar values). Not sure what the best approach here would be? Are many-to-one relationships are at all useful here?
What do you think about this approach? I could try to add it to the cli interface and documentation if wanted.
Thanks for this awesome piece of software in any case! :sun_with_face: ",2021-09-19T10:34:30Z,2022-12-29T09:05:36Z,2022-12-29T09:05:36Z,,f0105cde23452cb4c8a15fc6096154b15d9b7c5a,,,0,2840c697aa9817462d864ed5f8a7696d749fe039,8d641ab08ac449081e96f3e25bd6c0226870948a,NONE,140912432,https://github.com/simonw/sqlite-utils/pull/327,,
821992886,PR_kwDOCGYnMM4w_p22,385,closed,0,Add new spatialite helper methods,25778,"Refs #79
This PR adds three new Spatialite-related methods to Database and Table:
- `Database.init_spatialite` loads the Spatialite extension and initializes it
- `Table.add_geometry_column` adds a geometry column
- `Table.create_spatial_index` creates a spatial index
Has tests and documentation. Feedback very welcome.",2022-01-14T03:57:30Z,2022-02-05T00:04:26Z,2022-02-04T05:55:10Z,2022-02-04T05:55:10Z,ee11274fcb1c00f32c95f2ef2924d5349538eb4d,,,0,af86b17acf2fa50048e38b96497636d49db89766,74586d3cb26fa3cc3412721985ecdc1864c2a31d,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/385,,
768796296,PR_kwDOCGYnMM4t0uaI,333,closed,0,Add functionality to read Parquet files.,2118708,"I needed this for a project of mine, and I thought it'd be useful to have it in sqlite-utils (It's also mentioned in #248 ).
The current implementation works (data is read & data types are inferred correctly.
I've added a single straightforward test case, but @simonw please let me know if there are any non-obvious flags/combinations I should test too.",2021-10-28T23:43:19Z,2021-11-25T19:47:35Z,2021-11-25T19:47:35Z,,eda2b1f8d2670c6ca8512e3e7c0150866bd0bdc6,,,0,50ec2e49dee3b09a48a7aef55eceaa3f752a52e7,fda4dad23a0494890267fbe8baf179e2b56ee914,NONE,140912432,https://github.com/simonw/sqlite-utils/pull/333,,
925807233,PR_kwDOCGYnMM43LrKB,429,closed,0,Depend on click-default-group-wheel,9599,"Trying to get this to work with Pyodide.
Refs: https://github.com/simonw/click-default-group-wheel/issues/3",2022-05-02T18:03:10Z,2022-05-02T18:52:42Z,2022-05-02T18:05:00Z,2022-05-02T18:05:00Z,ed6fd516082e8cc83b199798f62dd67728a6974f,,,0,4a02dcf265702a4f11eed943bf8feaa502c590d5,e3a14c33a033b0c2fc00f2470666caaf9027e446,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/429,,
1040691996,PR_kwDOCGYnMM4-B7Mc,480,closed,0,search_sql add include_rank option,7908073,"I haven't tested this yet but wanted to get a heads-up whether this kind of change would be useful or if I should just duplicate the function and tweak it within my code
----
:books: Documentation preview :books:: https://sqlite-utils--480.org.readthedocs.build/en/480/
",2022-08-30T09:10:29Z,2022-08-31T03:40:35Z,2022-08-31T03:40:35Z,2022-08-31T03:40:35Z,ecf1d40112e52a8f4e509c39b98caae996b7bc36,,,0,3dbfca6fdd878ba381f83157fdae2042eeaed371,087753cd42c406f1e060c1822dcd9b5fda3d60f4,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/480,,
774610166,PR_kwDOCGYnMM4uK5z2,337,closed,0,Default values for `--attach` and `--param` options,771193,"It seems that `click` 8.x uses `None` as the default value for `multiple=True` options.
This change makes the code forward-compatible with `click` 8.x.
See this build failure for more info: https://hydra.nixos.org/build/156926608",2021-11-05T21:57:53Z,2021-11-05T22:33:03Z,2021-11-05T22:33:02Z,,eb8bf28da1794638a5693043cd5268f506a674d3,,,0,095fc64c5399d75d44d304571a21293d06d817f0,fda4dad23a0494890267fbe8baf179e2b56ee914,NONE,140912432,https://github.com/simonw/sqlite-utils/pull/337,,
293117183,MDExOlB1bGxSZXF1ZXN0MjkzMTE3MTgz,34,closed,0,sqlite-utils index-foreign-keys / db.index_foreign_keys(),9599,"Refs #33
- [x] `sqlite-utils index-foreign-keys` command
- [x] `db.index_foreign_keys()` method
- [x] unit tests
- [x] documentation",2019-06-30T16:43:40Z,2019-06-30T23:50:55Z,2019-06-30T23:50:55Z,2019-06-30T23:50:54Z,e8f887ef4a0977243811b90bc2ce9aed9d2c206a,,,0,d82b000e3d55067516e2ce42f131cf4695e80dca,0fe3b38290e1bb2d92746d90318d8662b57218bd,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/34,,
369348084,MDExOlB1bGxSZXF1ZXN0MzY5MzQ4MDg0,78,closed,0,"New conversions= feature, refs #77",9599,,2020-01-31T00:02:33Z,2020-09-22T07:48:29Z,2020-01-31T00:24:31Z,2020-01-31T00:24:31Z,e8b2b7383bd94659d3b7a857a1414328bc48bc19,,,0,58190d67821aaa57c8ca0320a08e3691d6e27344,59a2e8ebdcbde7e6fb091b0556713ca5a20ea4e7,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/78,,
614727036,MDExOlB1bGxSZXF1ZXN0NjE0NzI3MDM2,254,closed,0,Fix incorrect create-table cli description,1935268,The description for `create-table` was duplicated from `create-index`.,2021-04-13T20:03:15Z,2021-05-19T04:43:46Z,2021-05-19T02:57:26Z,2021-05-19T02:57:26Z,e7b2626291040b78b9a2dbc2982ba72691fb1a0f,,,0,cdeb7d7da77c6d1cd3554d08cb5659243cb3d55b,22f1d9e1999f70af4c5b0f880a820cd9eead3942,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/254,,
369394043,MDExOlB1bGxSZXF1ZXN0MzY5Mzk0MDQz,80,closed,0,on_create mechanism for after table creation,9599,"I need this for `geojson-to-sqlite`, in particular https://github.com/simonw/geojson-to-sqlite/issues/6",2020-01-31T03:38:48Z,2020-01-31T05:08:04Z,2020-01-31T05:08:04Z,,e6dc95d19348e72b28b42e73a18737cb2e4563e0,,,0,45bf0c25492c276bde0b85868ffb55f169375bd7,f7289174e66ae4d91d57de94bbd9d09fabf7aff4,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/80,,
475874493,MDExOlB1bGxSZXF1ZXN0NDc1ODc0NDkz,146,closed,0,Handle case where subsequent records (after first batch) include extra columns,96218,"Addresses #145.
I think this should do the job. If it meets with your approval I'll update this PR to include an update to the documentation -- I came across this bug while preparing a PR to update the documentation around `batch_size` in any event.",2020-08-30T07:13:58Z,2020-09-08T23:20:37Z,2020-09-08T23:20:37Z,2020-09-08T23:20:36Z,e6d202b742a7b531fffa593703d34f8337632d68,,,0,40fcea41525682fdc2f601da787b29d5a8517dcd,deb2eb013ff85bbc828ebc244a9654f0d9c3139e,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/146,,
255658112,MDExOlB1bGxSZXF1ZXN0MjU1NjU4MTEy,12,closed,0,"Support for numpy types, closes #11",9599,,2019-02-24T03:57:32Z,2019-02-24T04:02:20Z,2019-02-24T04:02:20Z,2019-02-24T04:02:20Z,e615d22c5564ea1f32abb086088b2700110be10a,,,0,7c20e60685088d6da0739749305215790ca8375a,c5068a0972651b3e359ebc2d6c1486b8b7d2c242,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/12,,
1358321208,PR_kwDOCGYnMM5Q9lY4,553,closed,0,Reformatted CLI examples in docs,9599,"Refs:
- #551
----
:books: Documentation preview :books:: https://sqlite-utils--553.org.readthedocs.build/en/553/
",2023-05-21T20:44:34Z,2023-05-21T20:57:27Z,2023-05-21T20:57:23Z,2023-05-21T20:57:22Z,d8fe1b0d899faaaa3d4714a39328f4c24932278f,,,0,21036a5084a2c846a05feb6bced3111d849bbe3c,e240133b11588d31dc22c632f7a7ca636c72978d,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/553,,
515014883,MDExOlB1bGxSZXF1ZXN0NTE1MDE0ODgz,195,closed,0,table.search() improvements plus sqlite-utils search command,9599,Refs #192. Still needs tests.,2020-11-03T22:02:08Z,2020-11-06T18:30:49Z,2020-11-06T18:30:42Z,2020-11-06T18:30:42Z,d411fba1f4124047429ac9d1175a04b36bf5bee9,,,0,973d94d44f27d35d856fe1cc822f9d5d40e4b5e6,59d8689ed0e6e042d99fd650896def680ca3c657,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/195,,
1358254580,PR_kwDOCGYnMM5Q9VH0,546,closed,0,"Analyze tables options: --common-limit, --no-most, --no-least",9599,"Refs #544
- [x] Documentation for CLI options
- [x] Documentation for new Python API parameters: `most_common: bool` and `least_common: bool`
- [x] Tests for CLI
- [x] Tests for Python API",2023-05-21T15:54:39Z,2023-05-21T16:19:30Z,2023-05-21T16:19:30Z,2023-05-21T16:19:30Z,d2a7b15b2b930fe384e1f1715fc4af23386f4935,,,0,2eca17d46eca2cff52c78553085ec64d9029c969,e047cc32e9d5de7025d4d3c16554d4290f4bd3d1,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/546,,
481616704,MDExOlB1bGxSZXF1ZXN0NDgxNjE2NzA0,151,closed,0,Tracer mechanism for seeing underlying SQL,9599,"Refs #150. Needs tests and documentation, including for the new `db.execute()` and `db.executescript()` methods.",2020-09-07T19:46:43Z,2020-09-07T21:57:00Z,2020-09-07T21:57:00Z,2020-09-07T21:57:00Z,cf2cb244faf992118f34aa196387a4ef8b39a20f,,,0,dc82bf371911d01ac140f40ea99d06d2daee507e,3e87500e1561f5c4e105cd026d33e0f715cc7dea,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/151,,
493162767,MDExOlB1bGxSZXF1ZXN0NDkzMTYyNzY3,178,closed,0,Update README.md,19921,"The `sqlite-utils insert releases.db releases - --pk` is missing the pk field name, added ` ""id""` to fix it.",2020-09-25T15:52:11Z,2020-10-01T14:18:30Z,2020-09-30T20:29:28Z,2020-09-30T20:29:28Z,cada1017edcfa691c2314d7ad1b7c7576495317f,,,0,0c6a81dae802a55d5469c18cd32402d11b6e8a59,94fc62857ee2655a21d85f6dae84b67bbfa5956d,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/178,,
297459797,MDExOlB1bGxSZXF1ZXN0Mjk3NDU5Nzk3,40,closed,0,.get() method plus support for compound primary keys,9599,"- [x] Tests for the `NotFoundError` exception
- [x] Documentation for `.get()` method
- [x] Support `--pk` multiple times to define CLI compound primary keys
- [x] Documentation for compound primary keys",2019-07-15T03:43:13Z,2019-07-15T04:28:57Z,2019-07-15T04:28:52Z,2019-07-15T04:28:52Z,c65b67ca46f70e2da46a5b945f4ed358173262e9,,,0,b5a5df6d0ed47f33f6e1b4873948ead9a7c71060,65b2156d9cc0aa6b5c3dc7a6bd600d98b281a13b,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/40,,
1000800283,PR_kwDOCGYnMM47pwAb,455,closed,0,"in extract code, check equality with IS instead of = for nulls",536941,"sqlite ""IS"" is equivalent to SQL ""IS NOT DISTINCT FROM""
closes #423",2022-07-19T13:40:25Z,2022-08-27T14:45:03Z,2022-08-27T14:45:03Z,2022-08-27T14:45:03Z,c5f8a2eb1a81a18b52825cc649112f71fe419b12,,,0,1b35a92e3ede76f0f29f6f8dcd899f44b2abbb02,855bce8c3823718def13e0b8928c58bf857e41b2,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/455,,
529090560,MDExOlB1bGxSZXF1ZXN0NTI5MDkwNTYw,204,closed,0,use jsonify_if_need for sql updates,78035,,2020-11-29T10:49:00Z,2020-12-08T17:49:42Z,2020-12-08T17:49:42Z,2020-12-08T17:49:42Z,c5f4f0f70ce394dfec6054c3c5aaedf330887093,,,0,8ea9ad1913aa63395391818ebb4e43bfce936dda,60d3c4821be4cf25c41097c1e8b79b2e60c5ead5,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/204,,
729731441,MDExOlB1bGxSZXF1ZXN0NzI5NzMxNDQx,326,closed,0,Test against 3.10-dev,9599,"This tests against the latest 3.10 RC, https://www.python.org/downloads/release/python-3100rc2/",2021-09-08T15:01:15Z,2021-10-13T21:49:28Z,2021-10-13T21:49:28Z,,c563260408e1b802cbbc81ec7c1e398350a1ca3a,,,0,078a08765d8aefa5ce376a03b2643d4ebe1aa57e,77c240df56068341561e95e4a412cbfa24dc5bc7,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/326,,
249680944,MDExOlB1bGxSZXF1ZXN0MjQ5NjgwOTQ0,9,closed,0,:pencil: Updates my_database.py to my_database.db,50527,I noticed that both `.py` and `.db` were used in the docs and assumed you'd prefer `.db`. ,2019-02-01T17:35:43Z,2019-02-24T03:55:04Z,2019-02-24T03:55:04Z,2019-02-24T03:55:04Z,c5068a0972651b3e359ebc2d6c1486b8b7d2c242,,,0,1ad604fbbd3311f041357190796a3613c0c729d1,441c131db5cc68e197db19f0623ff8a96c90c3ff,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/9,,
1136499802,PR_kwDOCGYnMM5DvZxa,515,closed,0,"upsert new rows with constraints, fixes #514",193185,"This fixes #514 by making the initial insert for upserts include all columns, so that new rows can be added to tables with non-pkey columns that have constraints.
(aside: I'm not a python programmer. `pip`? `pipenv`? `venv`? These are mystical incantations to me. The process to set up this repo for local development and testing was _so easy_. Thank you for the excellent contributing documentation!)
----
:books: Documentation preview :books:: https://sqlite-utils--515.org.readthedocs.build/en/515/
",2022-11-26T16:15:21Z,2023-05-08T21:27:11Z,2023-05-08T21:27:10Z,,c3713ef6944cbeacf36e462712cecac2176db692,,,0,32f8173a8fe830c224e39a0a514cd12e78de7028,965ca0d5f5bffe06cc02cd7741344d1ddddf9d56,NONE,140912432,https://github.com/simonw/sqlite-utils/pull/515,,
727012996,MDExOlB1bGxSZXF1ZXN0NzI3MDEyOTk2,324,closed,0,Use python-dateutil package instead of dateutils,191622,"While working on updating `sqlite-utils` for NixOS/Nixpkgs, I came a cross the following:
In 5ec6686153e29ae10d4921a1ad4c841f192f20e2, a new dependency was added on `dateutils` (https://pypi.org/project/dateutils/).
I believe this is unintentional, and instead `python-dateutil` (https://pypi.org/project/python-dateutil/) was intended.
My reasoning is:
- `python-dateutil` is imported here in [recipes.py](https://github.com/simonw/sqlite-utils/blob/5ec6686153e29ae10d4921a1ad4c841f192f20e2/sqlite_utils/recipes.py#L1)
- The `mypy` `type-python-dateutil` dependency in [setup.py](https://github.com/simonw/sqlite-utils/blob/5ec6686153e29ae10d4921a1ad4c841f192f20e2/setup.py#L36)
- `python-dateutil` is a dependency of `dateutils` as seen in the output in [docs/tutorial.ipynb](https://github.com/simonw/sqlite-utils/blob/77c240df56068341561e95e4a412cbfa24dc5bc7/docs/tutorial.ipynb#L43)
Seems like the trailing ""s"" seems to be the source of confusion 😅
I've swapped the dependencies out, hope this helps.",2021-09-03T18:31:19Z,2021-11-14T23:25:40Z,2021-11-14T23:25:40Z,2021-11-14T23:25:40Z,bc4c42d68879c710c851dba3c98deda96ca6caa8,,,0,275ac3b282947fa5df5d18de835d5d958a778e72,77c240df56068341561e95e4a412cbfa24dc5bc7,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/324,,
1029373779,PR_kwDOCGYnMM49Wv9T,466,closed,0,Use Read the Docs action v1 (#463),9599,"Read the Docs repository was renamed from `readthedocs/readthedocs-preview` to `readthedocs/actions/`. Now, the `preview` action is under `readthedocs/actions/preview` and is tagged as `v1`",2022-08-17T23:11:50Z,2022-08-17T23:11:54Z,2022-08-17T23:11:54Z,2022-08-17T23:11:54Z,bb90d3326815a041512b40bf0cf53b3ace06cd67,,,0,83e7339255e811c62e6db8498c483c44a84d0f28,72655adabc596a9eed43cc11c07177a390791068,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/466,,
1586779743,PR_kwDOCGYnMM5elFZf,600,closed,0,Add spatialite arm64 linux path,37802088,"According to both [Debian](https://packages.debian.org/bookworm/arm64/libsqlite3-mod-spatialite/filelist) and [Ubuntu](https://packages.ubuntu.com/mantic/arm64/libsqlite3-mod-spatialite/filelist), the correct “target triple” for arm64 is `aarch64-linux-gnu`, so we should be looking in `/usr/lib/aarch64-linux-gnu` for `mod_spatialite.so`.
I can confirm that on both of my Debian arm64 SBCs, `libsqlite3-mod-spatialite` installs to that path.
```
$ ls -l /usr/lib/*/*spatial*
lrwxrwxrwx 1 root root 23 Dec 1 2022 /usr/lib/aarch64-linux-gnu/mod_spatialite.so -> mod_spatialite.so.7.1.0
lrwxrwxrwx 1 root root 23 Dec 1 2022 /usr/lib/aarch64-linux-gnu/mod_spatialite.so.7 -> mod_spatialite.so.7.1.0
-rw-r--r-- 1 root root 7348584 Dec 1 2022 /usr/lib/aarch64-linux-gnu/mod_spatialite.so.7.1.0
```
This is a set of before and after snippets of pytest’s output for this PR.
### Before
```
$ pytest
tests/test_get.py ...... [ 73%]
tests/test_gis.py ssssssssssss [ 75%]
tests/test_hypothesis.py .... [ 75%]
```
### After
```
$ pytest
tests/test_get.py ...... [ 73%]
tests/test_gis.py ............ [ 75%]
tests/test_hypothesis.py .... [ 75%]
```
Issue: #599
----
:books: Documentation preview :books:: https://sqlite-utils--600.org.readthedocs.build/en/600/
",2023-11-03T22:23:26Z,2023-11-04T00:34:33Z,2023-11-04T00:31:49Z,2023-11-04T00:31:49Z,b92ea4793ce4dcb73cf762aae634ab72f65ec50f,,,0,b1a60766a4150268557c4445297087a3f076be01,622c3a5a7dd53a09c029e2af40c2643fe7579340,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/600,,
862823026,PR_kwDOCGYnMM4zbaJy,410,closed,0,Correct spelling mistakes (found with codespell),3818,,2022-02-24T20:44:18Z,2022-03-06T08:48:29Z,2022-03-01T21:05:29Z,2022-03-01T21:05:29Z,b6c9dfce0ba27eb5fb6bc2221044798420f861c4,,,0,a174069da6669b8914d4a08dded7fd750d52a316,7a098aa0c5e8beef6ccc55c866cf7792af5fcf43,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/410,,
992299943,PR_kwDOCGYnMM47JUun,452,closed,0,Add duplicate table feature,1690072,"This PR addresses a feature request raised in issue #449. Specifically this PR adds a functionality that lets users duplicate a table via:
```python
table_new = db[""my_table""].duplicate(""new_table"")
```
Test added in file `tests/test_duplicate.py`.
Happy to make changes to meet maintainers' feedback, if any. ",2022-07-09T20:24:31Z,2022-07-15T21:21:37Z,2022-07-15T21:21:36Z,2022-07-15T21:21:36Z,b366e68deb0780048a23610c279552f8529d4726,,,0,eef350fe543c6301c61b257c5f708e0e16ed5a34,42440d6345c242ee39778045e29143fb550bd2c2,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/452,,
445023326,MDExOlB1bGxSZXF1ZXN0NDQ1MDIzMzI2,118,closed,0,Add insert --truncate option,79913,"
Deletes all rows in the table (if it exists) before inserting new rows.
SQLite doesn't implement a TRUNCATE TABLE statement but does optimize an
unqualified DELETE FROM.
This can be handy if you want to refresh the entire contents of a table
but a) don't have a PK (so can't use --replace), b) don't want the table
to disappear (even briefly) for other connections, and c) have to handle
records that used to exist being deleted.
Ideally the replacement of rows would appear instantaneous to other
connections by putting the DELETE + INSERT in a transaction, but this is
very difficult without breaking other code as the current transaction
handling is inconsistent and non-systematic. There exists the
possibility for the DELETE to succeed but the INSERT to fail, leaving an
empty table. This is not much worse, however, than the current
possibility of one chunked INSERT succeeding and being committed while
the next chunked INSERT fails, leaving a partially complete operation.",2020-07-06T21:58:40Z,2020-07-08T17:26:21Z,2020-07-08T17:26:21Z,2020-07-08T17:26:21Z,ae4593316ccf5e42ad26f27033193834a7e696c8,,,0,332f7d770b84734dbed4842ab3ed24ee5b687889,f8277d0fb9c05a88a9ff01d996e31d55f0f0a645,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/118,,
1504920193,PR_kwDOCGYnMM5Zs0KB,591,closed,0,Test against Python 3.12 preview,9599,"https://dev.to/hugovk/help-test-python-312-beta-1508/
----
:books: Documentation preview :books:: https://sqlite-utils--591.org.readthedocs.build/en/591/
",2023-09-06T16:10:00Z,2023-11-04T00:58:03Z,2023-11-04T00:58:02Z,,ac0db3c705355178bd5a337b8dd74df141b12c7a,,,0,1f14df1de4a214b12abfba6edd61a4bfa0b8473e,347fdc865e91b8d3410f49a5c9d5b499fbb594c1,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/591,,
1082769953,PR_kwDOCGYnMM5AicIh,498,closed,0,fix: enable-fts permanently save triggers,7908073,"I was wondering why my all my databases were giving wild search results. Turns out create_trigger was not sticking!
Running `sqlite-utils triggers x.db` shows `[]` after running `enable-fts` using the python api. Looking at the counts trigger it seems that is the right way to save triggers. triggers show up now
----
:books: Documentation preview :books:: https://sqlite-utils--498.org.readthedocs.build/en/498/
",2022-10-11T05:10:51Z,2022-10-15T04:33:08Z,2022-10-11T06:34:31Z,,ab24d21e9c2aa9c514c3b65f05cfc0bafa7621c1,,,0,75577e595d9177177a48030a1c39573af010df51,d792dad1cf5f16525da81b1e162fb71d469995f3,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/498,,
672359609,MDExOlB1bGxSZXF1ZXN0NjcyMzU5NjA5,277,closed,0,add -h support closes #276,601708,This appears to be the [canonical solution](https://click.palletsprojects.com/en/7.x/documentation/#help-parameter-customization).,2021-06-17T08:08:26Z,2021-06-18T14:56:59Z,2021-06-18T14:56:59Z,2021-06-18T14:56:59Z,aa652b6afe43d2b40fabc7a513c3e68866e030a5,,,0,abbd324a2178f09b19966ec36ab2f584d1824c59,a19ce1a4d0048d389411cfe11a5dbe4c503720e1,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/277,,
853484980,PR_kwDOCGYnMM4y3yW0,407,closed,0,Add SpatiaLite helpers to CLI,25778,"Closes #398
This adds SpatiaLite helpers to the CLI.
```sh
# init spatialite when creating a database
sqlite-utils create database.db --enable-wal --init-spatialite
# add geometry columns
# needs a database, table, geometry column name, type, with optional SRID and not-null
# this will throw an error if the table doesn't already exist
sqlite-utils add-geometry-column database.db table-name geometry --srid 4326 --not-null
# spatial index an existing table/column
# this will throw an error it the table and column don't exist
sqlite-utils create-spatial-index database.db table-name geometry
```
Docs and tests are included. ",2022-02-15T16:50:17Z,2022-02-16T01:49:40Z,2022-02-16T00:58:08Z,2022-02-16T00:58:07Z,a692c56659c3563b26dcdc9e3534d63ecc26e180,,,0,a974da591915e0548182bbbf01da34ecb9e537e6,e7f040106b5f5a892ebd984f19b21c605e87c142,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/407,,
943686022,PR_kwDOCGYnMM44P4GG,437,closed,0,docs to dogs,114388,Fixes a typo.,2022-05-22T15:50:33Z,2022-05-30T21:32:41Z,2022-05-30T21:32:41Z,2022-05-30T21:32:41Z,9fedfc69d7239ac49900051e1c48ee9cdd470d9e,,,0,9e540417821385939db0fdd2d0a859f85be377e6,59be60c471fd7a2c4be7f75e8911163e618ff5ca,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/437,,
308292447,MDExOlB1bGxSZXF1ZXN0MzA4MjkyNDQ3,55,closed,0,Ability to introspect and run queries against views,9599,See #54 ,2019-08-17T13:40:56Z,2019-08-23T12:19:42Z,2019-08-23T12:19:42Z,2019-08-23T12:19:42Z,9faa98222669723d31e918bb16a42c13c363817f,,,0,4441d6d838fd7518ce715184361f549a04ec8b70,0e7b461eb3e925aef713206c15794ceae9259c57,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/55,,
357992588,MDExOlB1bGxSZXF1ZXN0MzU3OTkyNTg4,72,closed,0,Fixed implementation of upsert,9599,Refs #66,2019-12-30T05:08:05Z,2019-12-30T05:29:24Z,2019-12-30T05:29:24Z,2019-12-30T05:29:24Z,9f47e8b9a4cb788b48b76aee1333c6f3baaebbd6,,,0,ab8a4bda75fc59871ba8445c6a0fb2332483029c,dc0a62556ec092be7b341c5220e0410354f7cd02,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/72,,
301824097,MDExOlB1bGxSZXF1ZXN0MzAxODI0MDk3,51,closed,0,"Fix for too many SQL variables, closes #50",9599,,2019-07-28T11:30:30Z,2019-07-28T11:59:32Z,2019-07-28T11:59:32Z,2019-07-28T11:59:32Z,9cb045284ede8009c12abdb1755b5b20f6ccff5f,,,0,0c1b8b7f96be874bb63801f69323960f277aa49a,9b7be79c86b4283f24a64f62257c918f12542997,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/51,,
292879204,MDExOlB1bGxSZXF1ZXN0MjkyODc5MjA0,32,closed,0,db.add_foreign_keys() method,9599,"Refs #31. Still TODO:
- [x] Unit tests
- [x] Documentation",2019-06-28T15:40:33Z,2019-06-29T06:27:39Z,2019-06-29T06:27:39Z,2019-06-29T06:27:39Z,997d8758fc8992be93d5984556e5b9e3bad4205f,,,0,fc81588cc31df58374c996884c67cedd98a06f4a,86bd2bba689e25f09551d611ccfbee1e069e5b66,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/32,,
490607949,MDExOlB1bGxSZXF1ZXN0NDkwNjA3OTQ5,161,closed,0,table.transform() method,9599,"Refs #114
- [x] Ability to change the primary key
- [x] Support for changing default value for columns
- [x] Support for changing `NOT NULL` status of columns
- [x] Support for copying existing foreign keys and removing them
- Support for `conversions=` parameter
- [x] Detailed documentation
- [x] `PRAGMA foreign_keys` stuff",2020-09-21T23:16:59Z,2020-09-22T07:48:24Z,2020-09-22T04:20:02Z,2020-09-22T04:20:02Z,987dd123f2ac43c5ab66d69e59d454fe09660606,,5897911,0,dc3eb9c313502832c07f4de889aa60c373f45b52,ef882986d07f157b6bcc6be3d7b64270fda3e523,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/161,,
475665984,MDExOlB1bGxSZXF1ZXN0NDc1NjY1OTg0,142,closed,0,"insert_all(..., alter=True) should work for new columns introduced after the first 100 records",96218,Closes #139.,2020-08-28T22:22:57Z,2020-08-30T07:28:23Z,2020-08-28T22:30:14Z,2020-08-28T22:30:14Z,947bb7626fd1763608a470adf9cf5f156ef003e9,,,0,1b992c7c1e5855caa87c7939efad287052f446f3,ea87c2b943fdd162c42a900ac0aea5ecc2f4b9d9,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/142,,
300377599,MDExOlB1bGxSZXF1ZXN0MzAwMzc3NTk5,47,closed,0,extracts= table parameter,9599,Still needs docs. Refs #46,2019-07-23T16:30:29Z,2019-07-23T17:00:43Z,2019-07-23T17:00:43Z,2019-07-23T17:00:43Z,941d281aee6eac20ad64b505511da7e47f697700,,,0,1c9d08f75a48b2a3770f2a880462dc8b195289b7,e22cfcd953f967f6e9551b3a048d7c40726f349b,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/47,,
1306498393,PR_kwDOCGYnMM5N35VZ,536,closed,0,Add paths for homebrew on Apple silicon,25778,"Does what it says and nothing else. This is the same set of paths as Datasette uses.
----
:books: Documentation preview :books:: https://sqlite-utils--536.org.readthedocs.build/en/536/
",2023-04-08T13:34:21Z,2023-04-13T01:44:43Z,2023-04-13T01:44:43Z,2023-04-13T01:44:43Z,8f9a729e8aff972cb18de25b40f4113e26bbc758,,,0,cea05dc5eab8d10fbd8943e615d2ab0dceff863c,c0251cc9271260de73b4227859a51fab9b4cb745,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/536,,
395258687,MDExOlB1bGxSZXF1ZXN0Mzk1MjU4Njg3,96,closed,0,Add type conversion for Panda's Timestamp,32605365,"Add type conversion for Panda's Timestamp, if Panda library is present in system
(thanks for this project, I was about to do the same thing from scratch)",2020-03-29T14:13:09Z,2020-03-31T04:40:49Z,2020-03-31T04:40:48Z,2020-03-31T04:40:48Z,8ea626e5fcdc4c9e52f615c6347e68173805f8b4,,,0,16ebbd2d494caabd0eeb502f8a944614b464bb12,22250a9c735077d6f365b73bf824e6c67b122c83,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/96,,
499603359,MDExOlB1bGxSZXF1ZXN0NDk5NjAzMzU5,184,closed,0,Test against Python 3.9,9599,,2020-10-08T01:37:05Z,2020-10-08T01:44:06Z,2020-10-08T01:44:06Z,2020-10-08T01:44:06Z,8e91de8e4edf6c8abeeccdf084b8870fff40a51a,,,0,975c05b6dde9feebcdecabc047d47122ebcfdf84,7f4fe9190c1df7f0e72f9d7040327a43cf252c48,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/184,,
337847573,MDExOlB1bGxSZXF1ZXN0MzM3ODQ3NTcz,64,closed,0,test_insert_upsert_all_empty_list,9599,,2019-11-07T04:24:45Z,2019-11-07T04:32:38Z,2019-11-07T04:32:38Z,2019-11-07T04:32:38Z,8dab9fd1ccf571e188eec9ccf606a0c50fccf200,,,0,8daea7f1265ddcce67d28258068a25666954000f,a0a65f9a6405079b01aefdbf4b5f507bc758567a,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/64,,
346264926,MDExOlB1bGxSZXF1ZXN0MzQ2MjY0OTI2,67,closed,0,Run tests against 3.5 too,9599,,2019-11-27T14:20:35Z,2019-12-31T01:29:44Z,2019-12-31T01:29:43Z,,88375b0bc055067b996584f06ed85a9a90c5aa1a,,,0,4c6e5a4486e0e17555774eb3279142234a8b4abc,0a0cec3cf27861455e8cd1c4d84937825a18bb30,OWNER,140912432,https://github.com/simonw/sqlite-utils/pull/67,,
1022525059,PR_kwDOCGYnMM488n6D,463,closed,0,Use Read the Docs action v1,244656,"Read the Docs repository was renamed from `readthedocs/readthedocs-preview` to `readthedocs/actions/`. Now, the `preview` action is under `readthedocs/actions/preview` and is tagged as `v1`
----
:books: Documentation preview :books:: https://sqlite-utils--463.org.readthedocs.build/en/463/
",2022-08-10T10:31:47Z,2022-08-18T08:30:14Z,2022-08-17T23:11:16Z,2022-08-17T23:11:16Z,83e7339255e811c62e6db8498c483c44a84d0f28,,,0,364110b97bd1c6e0d2bc841730e5dc1a595e537d,271433fdd18e436b0a527ab899cb6f6fa67f23d0,CONTRIBUTOR,140912432,https://github.com/simonw/sqlite-utils/pull/463,,
313007483,MDExOlB1bGxSZXF1ZXN0MzEzMDA3NDgz,56,closed,0,Escape the table name in populate_fts and search.,49260,"The table names weren't escaped using double quotes in the populate_fts method.
Reproducible case:
```
>>> import sqlite_utils
>>> db = sqlite_utils.Database(""abc.db"")
>>> db[""http://example.com""].insert_all([
... {""id"": 1, ""age"": 4, ""name"": ""Cleo""},
... {""id"": 2, ""age"": 2, ""name"": ""Pancakes""}
... ], pk=""id"")