home / github

Menu
  • Search all tables
  • GraphQL API

issue_comments

Table actions
  • GraphQL API for issue_comments

17 rows where issue = 1421544654 and user = 9599 sorted by updated_at descending

✖
✖
✖

✎ View and edit SQL

This data as json, CSV (advanced)

Suggested facets: created_at (date), updated_at (date)

user 1

  • simonw · 17 ✖

issue 1

  • API to insert a single record into an existing table · 17 ✖

author_association 1

  • OWNER 17
id html_url issue_url node_id user created_at updated_at ▲ author_association body reactions issue performed_via_github_app
1294224185 https://github.com/simonw/datasette/issues/1851#issuecomment-1294224185 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NJEs5 simonw 9599 2022-10-27T23:18:24Z 2022-11-03T23:26:05Z OWNER

So new API design is:

POST /db/table/-/insert Authorization: Bearer xxx Content-Type: application/json { "row": { "id": 1, "name": "New record" } } Returns: 201 Created { "row": [{ "id": 1, "name": "New record" }] }

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1294281451 https://github.com/simonw/datasette/issues/1851#issuecomment-1294281451 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NJSrr simonw 9599 2022-10-28T00:59:25Z 2022-10-28T00:59:25Z OWNER

I'm going to use this endpoint for bulk inserts too, so I'm closing this issue and continuing the work here: - #1866

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1289712350 https://github.com/simonw/datasette/issues/1851#issuecomment-1289712350 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5M33Le simonw 9599 2022-10-24T22:28:39Z 2022-10-27T23:18:48Z OWNER

API design: (**UPDATE: this was later changed to POST /db/table/-/insert)

POST /db/table Authorization: Bearer xxx Content-Type: application/json { "row": { "id": 1, "name": "New record" } } Returns: 201 Created { "row": { "id": 1, "name": "New record" } } You can omit optional fields in the input, including the ID field. The returned object will always include all fields - and will even include rowid if your object doesn't have a primary key of its own.

I decided to use "row" as the key in both request and response, to preserve space for other future keys - one that tells you that the table has been created, for example.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1294012583 https://github.com/simonw/datasette/issues/1851#issuecomment-1294012583 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NIRCn simonw 9599 2022-10-27T20:11:22Z 2022-10-27T20:11:22Z OWNER

And the response to "inserted": [{...}] - it will be the same for bulk inserts.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1294012084 https://github.com/simonw/datasette/issues/1851#issuecomment-1294012084 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NIQ60 simonw 9599 2022-10-27T20:10:47Z 2022-10-27T20:10:47Z OWNER

I'm going to change the incoming JSON back to {"row": {...}} - no need to POST {"insert": ...} to something with /-/insert in the URL already.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1294009354 https://github.com/simonw/datasette/issues/1851#issuecomment-1294009354 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NIQQK simonw 9599 2022-10-27T20:07:42Z 2022-10-27T20:07:42Z OWNER

Need to implement the new URL design from: - #1868

This is now going to be /db/table/-/insert - and it will eventually handle bulk inserts as well as single inserts.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1293996735 https://github.com/simonw/datasette/issues/1851#issuecomment-1293996735 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NINK_ simonw 9599 2022-10-27T19:54:53Z 2022-10-27T19:54:53Z OWNER

Updated docs: https://docs.datasette.io/en/1.0-dev/json_api.html#inserting-a-single-row

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292997608 https://github.com/simonw/datasette/issues/1851#issuecomment-1292997608 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NEZPo simonw 9599 2022-10-27T04:54:53Z 2022-10-27T19:05:50Z OWNER

I'm going to change the design of this to: { "insert": { "title" :"..." } } Renaming "row" to "insert".

This will be consistent with adding "drop": true for dropping a table, and maybe other verbs like for modifying the schema.

The API response will look like this:

json { "inserted_row": { "id": 1, "title": "..." } }

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292999579 https://github.com/simonw/datasette/issues/1851#issuecomment-1292999579 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NEZub simonw 9599 2022-10-27T04:59:06Z 2022-10-27T04:59:12Z OWNER

I should probably refactor this to use sqlite-utils, since I'm going to want to use that later for the feature that automatically creates tables.

Might make it easier to solve the rowid issues too.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292996181 https://github.com/simonw/datasette/issues/1851#issuecomment-1292996181 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NEY5V simonw 9599 2022-10-27T04:51:47Z 2022-10-27T04:51:47Z OWNER

Also need a test for invalid JSON (currently triggers a 500 HTML error).

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292952121 https://github.com/simonw/datasette/issues/1851#issuecomment-1292952121 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NEOI5 simonw 9599 2022-10-27T04:24:09Z 2022-10-27T04:24:20Z OWNER

And come up with a whole bunch of tests for weird table shapes, surprising column names, different types etc.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292951833 https://github.com/simonw/datasette/issues/1851#issuecomment-1292951833 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NEOEZ simonw 9599 2022-10-27T04:23:40Z 2022-10-27T04:23:40Z OWNER

Also need to think about transactions - it should use them!

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292939146 https://github.com/simonw/datasette/issues/1851#issuecomment-1292939146 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NEK-K simonw 9599 2022-10-27T04:00:17Z 2022-10-27T04:23:15Z OWNER

Documentation for this first draft of the API: https://docs.datasette.io/en/1.0-dev/json_api.html#inserting-a-single-row

It currently returns errors as HTML - it needs to return errors as JSON. Also the errors need comprehensive test coverage.

I'm also worried about what happens if you use it on a table that doesn't use an integer primary key - need to check that. I think this code may break:

https://github.com/simonw/datasette/blob/51c436fed29205721dcf17fa31d7e7090d34ebb8/datasette/views/table.py#L155-L171

Plus will rowid tables without an explicit primary key return the rowid column? They should.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1292544296 https://github.com/simonw/datasette/issues/1851#issuecomment-1292544296 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5NCqko simonw 9599 2022-10-26T19:33:34Z 2022-10-26T19:33:34Z OWNER

That trigger solution is pretty neat!

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1291226367 https://github.com/simonw/datasette/issues/1851#issuecomment-1291226367 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5M9oz_ simonw 9599 2022-10-25T22:58:30Z 2022-10-25T22:58:30Z OWNER

The datasette insert concept included plugin support, with the idea of being able to support things like SpatiaLite files: - #1160

I think this API mechanism is going to be a bit less exciting than that - it will be low-level for inserting rows, and if you want to do something fancier you can use a canned query that feeds incoming GeoJSON to a SpatiaLite function instead.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1289865317 https://github.com/simonw/datasette/issues/1851#issuecomment-1289865317 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5M4chl simonw 9599 2022-10-25T01:42:47Z 2022-10-25T01:42:47Z OWNER

This is going to tie into Datasette's existing permissions mechanism, so plugins will be able to define their own custom mechanisms for tokens to be attached to a specific identity: https://docs.datasette.io/en/stable/authentication.html

There's only one plugin for API tokens at the moment, which is this one: https://datasette.io/plugins/datasette-auth-tokens

I'm actually planning on adding another, default token mechanism to Datasette itself as part of this work:

  • 1852

It may well be that datasette-sandstorm-support needs to add something custom here too.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  
1289713513 https://github.com/simonw/datasette/issues/1851#issuecomment-1289713513 https://api.github.com/repos/simonw/datasette/issues/1851 IC_kwDOBm6k_c5M33dp simonw 9599 2022-10-24T22:29:58Z 2022-10-24T22:30:15Z OWNER

Interesting open question: how should validation errors (if any) be returned?

The two forms of validation I can think of at first are:

  • Missing keys which are marked as not null in the schema
  • Keys that do not match to existing columns (if you didn't pass "alter": true, an option I am considering)
{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
API to insert a single record into an existing table 1421544654  

Advanced export

JSON shape: default, array, newline-delimited, object

CSV options:

CREATE TABLE [issue_comments] (
   [html_url] TEXT,
   [issue_url] TEXT,
   [id] INTEGER PRIMARY KEY,
   [node_id] TEXT,
   [user] INTEGER REFERENCES [users]([id]),
   [created_at] TEXT,
   [updated_at] TEXT,
   [author_association] TEXT,
   [body] TEXT,
   [reactions] TEXT,
   [issue] INTEGER REFERENCES [issues]([id])
, [performed_via_github_app] TEXT);
CREATE INDEX [idx_issue_comments_issue]
                ON [issue_comments] ([issue]);
CREATE INDEX [idx_issue_comments_user]
                ON [issue_comments] ([user]);
Powered by Datasette · Queries took 447.247ms · About: github-to-sqlite
  • Sort ascending
  • Sort descending
  • Facet by this
  • Hide this column
  • Show all columns
  • Show not-blank rows