Title: sqlite3.Row behaves like a dictionary but doesn't handle "in" as one might expect · Issue #100450 · python/cpython · GitHub
Open Graph Title: sqlite3.Row behaves like a dictionary but doesn't handle "in" as one might expect · Issue #100450 · python/cpython
X Title: sqlite3.Row behaves like a dictionary but doesn't handle "in" as one might expect · Issue #100450 · python/cpython
Description: The sqlite3.Row class is supposed to give access to row results by name as well as index. So in some respects it behaves like a dictionary (it even has a keys() method) but it doesn't appear to handle the in operator as one might expect....
Open Graph Description: The sqlite3.Row class is supposed to give access to row results by name as well as index. So in some respects it behaves like a dictionary (it even has a keys() method) but it doesn't appear to han...
X Description: The sqlite3.Row class is supposed to give access to row results by name as well as index. So in some respects it behaves like a dictionary (it even has a keys() method) but it doesn't appear to...
Opengraph URL: https://github.com/python/cpython/issues/100450
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"sqlite3.Row behaves like a dictionary but doesn't handle \"in\" as one might expect","articleBody":"The `sqlite3.Row` class is supposed to give access to row results by name as well as index. So in some respects it behaves like a dictionary (it even has a `keys()` method) but it doesn't appear to handle the ` in ` operator as one might expect.\r\n\r\nThe following minimal script illustrates:\r\n```python\r\nimport sqlite3\r\n\r\nCREATION = 'CREATE TABLE lookup (name TEXT NOT NULL, value TEXT NOT NULL)'\r\nINSERTION = 'INSERT INTO lookup (name, value) VALUES(?, ?)'\r\nSELECTION = 'SELECT name, value from lookup'\r\n\r\ndb = sqlite3.connect(':memory:')\r\ncur = db.cursor()\r\ncur.execute(CREATION)\r\ncur.execute(INSERTION, ('foo', 'bar'))\r\ndb.commit()\r\ncur.row_factory = sqlite3.Row\r\ncur.execute(SELECTION)\r\nrows = cur.fetchall()\r\nrow = rows[0]\r\nprint(f'{row.keys()=}')\r\nfor k in row.keys():\r\n print(f'{k=}')\r\n print(f'{k in row=}')\r\n print(f'{row[k]=}')\r\n```\r\n\r\nprints\r\n```\r\nrow.keys()=['name', 'value']\r\nk='name'\r\nk in row=False\r\nrow[k]='foo'\r\nk='value'\r\nk in row=False\r\nrow[k]='bar'\r\n```\r\n\r\nOne would reasonably expect `k in row` to be `True`.\r\n\r\nTested on Python 3.10.0, Ubuntu 20.04, but not believed to be restricted to those.\r\n\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-100457\n\u003c!-- /gh-linked-prs --\u003e\n","author":{"url":"https://github.com/vsajip","@type":"Person","name":"vsajip"},"datePublished":"2022-12-23T08:12:24.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":21},"url":"https://github.com/100450/cpython/issues/100450"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:b42cca4e-430e-a25c-535d-29cf0e489dca |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 87CA:1C99EC:5AEBEF:7EB0E8:696A24F7 |
| html-safe-nonce | 9423058105eddeef608062688fbf2d7750cd4e7875d33b4031b3ca31e081dfd0 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4N0NBOjFDOTlFQzo1QUVCRUY6N0VCMEU4OjY5NkEyNEY3IiwidmlzaXRvcl9pZCI6IjExMDY4NTA1NTE4MzIzODg4NTUiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 2c8842b3b32e424fc5aa71183cb1ab7b03a345f49a2eedabcf54b256def4dbf9 |
| hovercard-subject-tag | issue:1509038286 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/100450/issue_layout |
| twitter:image | https://opengraph.githubassets.com/520cfbbc7244ab1a58a6d8579582bd0b840509fdb364521e95bca67780a3f97d/python/cpython/issues/100450 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/520cfbbc7244ab1a58a6d8579582bd0b840509fdb364521e95bca67780a3f97d/python/cpython/issues/100450 |
| og:image:alt | The sqlite3.Row class is supposed to give access to row results by name as well as index. So in some respects it behaves like a dictionary (it even has a keys() method) but it doesn't appear to han... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | vsajip |
| hostname | github.com |
| expected-hostname | github.com |
| None | a1022f03e4f0d91ea173e4e5dac892c982e0588c62f1ce56121d755a320a3569 |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | f472b8e6c7b3fdd5d0354972a3f4c516289bf0be |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width